Update upstream source from tag 'upstream/13.9.3+ds1'
Update to upstream version '13.9.3+ds1'
with Debian dir 6ebd924a1f
16
.browserslistrc
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# This list of browsers is a conservative first definition, based on
|
||||
# https://docs.gitlab.com/ee/install/requirements.html#supported-web-browsers
|
||||
# with the following reasoning:
|
||||
#
|
||||
# - Edge: Pick the last two major version before the Chrome switch
|
||||
# - Rest: We should support the latest ESR of Firefox: 68, because it used quite a lot.
|
||||
# For the rest, pick browser versions that have a similar age to Firefox 68.
|
||||
#
|
||||
# See also this follow-up epic:
|
||||
# https://gitlab.com/groups/gitlab-org/-/epics/3957
|
||||
#
|
||||
chrome >= 73
|
||||
edge >= 17
|
||||
firefox >= 68
|
||||
safari >= 12
|
|
@ -42,21 +42,50 @@ rules:
|
|||
no-jquery/no-serialize: error
|
||||
promise/always-return: off
|
||||
promise/no-callback-in-promise: off
|
||||
"@gitlab/no-global-event-off": error
|
||||
|
||||
# BEGIN eslint-plugin-vue@7 overrides
|
||||
# TODO: Remove these rules as part of
|
||||
# https://gitlab.com/groups/gitlab-org/-/epics/5142. These are setting
|
||||
# various vue lint rules as they were in eslint-plugin-vue@6, or disabling
|
||||
# new ones, to ease migration to v7, so violations of each can be fixed
|
||||
# separately.
|
||||
vue/no-mutating-props: off
|
||||
vue/one-component-per-file: off
|
||||
vue/no-lone-template: off
|
||||
vue/component-definition-name-casing: off
|
||||
# END eslint-plugin-vue@7 overrides
|
||||
'@gitlab/no-global-event-off': error
|
||||
import/order:
|
||||
- error
|
||||
- groups:
|
||||
- builtin
|
||||
- external
|
||||
- internal
|
||||
- parent
|
||||
- sibling
|
||||
- index
|
||||
pathGroups:
|
||||
- pattern: ~/**
|
||||
group: internal
|
||||
- pattern: emojis/**
|
||||
group: internal
|
||||
- pattern: '{ee_,}empty_states/**'
|
||||
group: internal
|
||||
- pattern: '{ee_,}icons/**'
|
||||
group: internal
|
||||
- pattern: '{ee_,}images/**'
|
||||
group: internal
|
||||
- pattern: vendor/**
|
||||
group: internal
|
||||
- pattern: shared_queries/**
|
||||
group: internal
|
||||
- pattern: '{ee_,}spec/**'
|
||||
group: internal
|
||||
- pattern: '{ee_,}jest/**'
|
||||
group: internal
|
||||
- pattern: ee_else_ce/**
|
||||
group: internal
|
||||
- pattern: ee/**
|
||||
group: internal
|
||||
- pattern: ee_component/**
|
||||
group: internal
|
||||
- pattern: '{test_,}helpers/**'
|
||||
group: internal
|
||||
- pattern: test_fixtures/**
|
||||
group: internal
|
||||
alphabetize:
|
||||
order: asc
|
||||
overrides:
|
||||
- files:
|
||||
- '**/spec/**/*'
|
||||
rules:
|
||||
"@gitlab/require-i18n-strings": off
|
||||
'@gitlab/require-i18n-strings': off
|
||||
'@gitlab/no-runtime-template-compiler': off
|
||||
|
|
|
@ -17,7 +17,7 @@ stages:
|
|||
# in cases where jobs require Docker-in-Docker, the job
|
||||
# definition must be extended with `.use-docker-in-docker`
|
||||
default:
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-golang-1.14-git-2.29-lfs-2.9-chrome-85-node-12.18-yarn-1.22-postgresql-11-graphicsmagick-1.3.34"
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.34"
|
||||
tags:
|
||||
- gitlab-org
|
||||
# All jobs are interruptible by default
|
||||
|
@ -111,3 +111,4 @@ include:
|
|||
- local: .gitlab/ci/dast.gitlab-ci.yml
|
||||
- local: .gitlab/ci/workhorse.gitlab-ci.yml
|
||||
- local: .gitlab/ci/graphql.gitlab-ci.yml
|
||||
- local: .gitlab/ci/verify-lockfile.gitlab-ci.yml
|
||||
|
|
|
@ -6,137 +6,128 @@
|
|||
*.rb @gitlab-org/maintainers/rails-backend
|
||||
*.rake @gitlab-org/maintainers/rails-backend
|
||||
|
||||
[Documentation]
|
||||
[Documentation Directories]
|
||||
/doc/ @gl-docsteam
|
||||
/doc/administration/monitoring/ @aqualls
|
||||
/doc/.vale/ @marcel.amirault @eread @aqualls @cnorris
|
||||
/doc/administration/geo/ @axil
|
||||
/doc/administration/gitaly/ @eread
|
||||
/doc/administration/integration/ @aqualls
|
||||
/doc/administration/lfs/ @aqualls
|
||||
/doc/administration/monitoring/ @ngaskill
|
||||
/doc/administration/operations/ @axil @eread @marcia
|
||||
/doc/administration/packages/ @ngaskill
|
||||
/doc/administration/postgresql/ @marcia
|
||||
/doc/administration/raketasks/ @axil @eread @mjang1
|
||||
/doc/administration/redis/ @axil
|
||||
/doc/administration/reference_architectures/ @axil
|
||||
/doc/administration/snippets/ @aqualls
|
||||
/doc/administration/troubleshooting @axil @marcia @mjang1
|
||||
/doc/ci/ @marcel.amirault @sselhorn
|
||||
/doc/ci/environments/ @axil
|
||||
/doc/ci/release/ @axil
|
||||
/doc/ci/services/ @sselhorn
|
||||
/doc/ci/test_cases/ @msedlakjakubowski
|
||||
/doc/development/ @marcia @mjang1
|
||||
/doc/development/documentation/ @cnorris
|
||||
/doc/ci @marcel.amirault @sselhorn
|
||||
/doc/operations @aqualls @eread
|
||||
/doc/user/clusters @aqualls
|
||||
/doc/user/infrastructure @aqualls
|
||||
/doc/user/project/clusters @aqualls
|
||||
/doc/.vale/ @marcel.amirault @eread @aqualls @cnorris
|
||||
/doc/gitlab-basics/ @marcia
|
||||
/doc/install/ @axil
|
||||
/doc/integration/ @aqualls @mjang1
|
||||
/doc/operations/ @ngaskill @axil
|
||||
/doc/push_rules/ @aqualls
|
||||
/doc/ssh/ @mjang1
|
||||
/doc/subscriptions/ @sselhorn
|
||||
/doc/topics/autodevops/ @ngaskill @marcia
|
||||
/doc/topics/git/ @aqualls
|
||||
/doc/update/ @axil @marcia
|
||||
/doc/user/analytics/ @mjang1 @ngaskill
|
||||
/doc/user/application_security @rdickenson
|
||||
/doc/user/clusters/ @marcia
|
||||
/doc/user/compliance/ @mjang1 @rdickenson
|
||||
/doc/user/group/ @mjang1 @msedlakjakubowski
|
||||
/doc/user/group/bulk_editing/ @msedlakjakubowski
|
||||
/doc/user/group/epics/ @msedlakjakubowski
|
||||
/doc/user/group/iterations/ @msedlakjakubowski
|
||||
/doc/user/group/roadmap/ @msedlakjakubowski
|
||||
/doc/user/infrastructure/ @marcia
|
||||
/doc/user/packages/ @ngaskill
|
||||
/doc/user/profile/ @mjang1 @msedlakjakubowski
|
||||
/doc/user/project/ @aqualls @axil @eread @mjang1 @msedlakjakubowski @ngaskill
|
||||
/doc/user/project/clusters/ @ngaskill
|
||||
/doc/user/project/import/ @mjang1 @msedlakjakubowski
|
||||
/doc/user/project/integrations/ @aqualls
|
||||
/doc/user/project/integrations/prometheus_library/ @ngaskill
|
||||
/doc/user/project/issues/ @msedlakjakubowski
|
||||
/doc/user/project/merge_requests/ @aqualls @eread
|
||||
/doc/user/project/milestones/ @msedlakjakubowski
|
||||
/doc/user/project/pages/ @axil
|
||||
/doc/user/project/repository/ @aqualls
|
||||
/doc/user/project/settings/ @mjang1 @aqualls
|
||||
/doc/user/project/static_site_editor/index.md @aqualls
|
||||
/doc/user/project/web_ide/index.md @aqualls
|
||||
/doc/user/project/wiki/index.md @aqualls
|
||||
/doc/user/search/ @marcia @aqualls
|
||||
|
||||
[Docs Create]
|
||||
/doc/user/project/merge_requests/allow_collaboration.md @marcia
|
||||
/doc/user/project/merge_requests/authorization_for_merge_requests.md @marcia
|
||||
/doc/user/project/merge_requests/cherry_pick_changes.md @marcia
|
||||
/doc/user/project/merge_requests/creating_merge_requests.md @marcia
|
||||
/doc/user/project/merge_requests/fast_forward_merge.md @marcia
|
||||
/doc/user/project/merge_requests/getting_started.md @marcia
|
||||
/doc/user/project/merge_requests/index.md @marcia
|
||||
/doc/user/project/merge_requests/merge_request_approvals.md @marcia
|
||||
/doc/user/project/merge_requests/merge_request_dependencies.md @marcia
|
||||
/doc/user/project/merge_requests/resolve_conflicts.md @marcia
|
||||
/doc/user/project/merge_requests/revert_changes.md @marcia
|
||||
/doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md @marcia
|
||||
/doc/user/project/merge_requests/squash_and_merge.md @marcia
|
||||
/doc/user/project/merge_requests/work_in_progress_merge_requests.md @marcia
|
||||
/doc/user/project/repository/file_finder.md @marcia
|
||||
/doc/user/project/repository/forking_workflow.md @marcia
|
||||
/doc/user/project/repository/git_blame.md @marcia
|
||||
/doc/user/project/repository/git_history.md @marcia
|
||||
/doc/user/project/repository/index.md @marcia
|
||||
/doc/user/project/repository/repository_mirroring.md @marcia
|
||||
/doc/user/project/repository/web_editor.md @marcia
|
||||
/doc/user/project/autocomplete_characters.md @marcia
|
||||
/doc/user/project/badges.md @marcia
|
||||
/doc/user/project/code_intelligence.md @marcia
|
||||
/doc/user/project/code_owners.md @marcia
|
||||
/doc/user/project/file_lock.md @marcia
|
||||
/doc/user/project/git_attributes.md @marcia
|
||||
/doc/user/project/highlighting.md @marcia
|
||||
/doc/user/project/index.md @marcia
|
||||
/doc/user/project/protected_branches.md @marcia
|
||||
/doc/user/project/protected_tags.md @marcia
|
||||
/doc/user/project/push_options.md @marcia
|
||||
/doc/user/project/repository/branches/index.md @marcia
|
||||
/doc/user/project/repository/gpg_signed_commits/index.md @marcia
|
||||
/doc/user/project/repository/jupyter_notebooks/index.md @marcia
|
||||
/doc/user/project/repository/x509_signed_commits/index.md @marcia
|
||||
/doc/user/project/settings/import_export.md @marcia
|
||||
/doc/user/project/settings/index.md @marcia
|
||||
/doc/user/project/settings/project_access_tokens.md @marcia
|
||||
/doc/user/project/static_site_editor/index.md @marcia
|
||||
/doc/user/project/web_ide/index.md @marcia
|
||||
/doc/user/project/wiki/index.md @marcia
|
||||
/doc/gitlab-basics/README.md @marcia
|
||||
/doc/gitlab-basics/add-file.md @marcia
|
||||
/doc/gitlab-basics/command-line-commands.md @marcia
|
||||
/doc/gitlab-basics/create-branch.md @marcia
|
||||
/doc/gitlab-basics/create-project.md @marcia
|
||||
/doc/gitlab-basics/create-your-ssh-keys.md @marcia
|
||||
/doc/gitlab-basics/feature_branch_workflow.md @marcia
|
||||
/doc/gitlab-basics/fork-project.md @marcia
|
||||
/doc/gitlab-basics/start-using-git.md @marcia
|
||||
/doc/integration/sourcegraph.md @marcia
|
||||
/doc/intro/README.md @marcia
|
||||
/doc/push_rules/push_rules.md @marcia
|
||||
/doc/ssh/README.md @marcia
|
||||
/doc/topics/git/feature_branch_development.md @marcia
|
||||
/doc/topics/git/how_to_install_git/index.md @marcia
|
||||
/doc/topics/git/index.md @marcia
|
||||
/doc/topics/git/lfs/index.md @marcia
|
||||
/doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md @marcia
|
||||
/doc/topics/git/numerous_undo_possibilities_in_git/index.md @marcia
|
||||
/doc/topics/git/partial_clone.md @marcia
|
||||
/doc/topics/git/troubleshooting_git.md @marcia
|
||||
/doc/topics/git/useful_git_commands.md @marcia
|
||||
/doc/topics/gitlab_flow.md @marcia
|
||||
/doc/user/index.md @marcia
|
||||
/doc/user/snippets.md @marcia
|
||||
/doc/administration/issue_closing_pattern.md @marcia
|
||||
/doc/user/asciidoc.md @marcia
|
||||
/doc/user/markdown.md @marcia
|
||||
/doc/user/search/advanced_global_search.md @marcia
|
||||
/doc/user/search/advanced_search_syntax.md @marcia
|
||||
/doc/user/search/index.md @marcia
|
||||
/doc/administration/file_hooks.md @marcia
|
||||
/doc/administration/git_annex.md @marcia
|
||||
/doc/administration/git_protocol.md @marcia
|
||||
/doc/administration/integration/plantuml.md @marcia
|
||||
/doc/administration/invalidate_markdown_cache.md @marcia
|
||||
/doc/administration/issue_closing_pattern.md @marcia
|
||||
/doc/administration/lfs/index.md @marcia
|
||||
/doc/administration/merge_request_diffs.md @marcia
|
||||
/doc/administration/repository_checks.md @marcia
|
||||
/doc/administration/snippets/index.md @marcia
|
||||
/doc/administration/static_objects_external_storage.md @marcia
|
||||
/doc/api/access_requests.md @marcia
|
||||
/doc/api/branches.md @marcia
|
||||
/doc/api/commits.md @marcia
|
||||
/doc/api/discussions.md @marcia
|
||||
/doc/api/group_wikis.md @marcia
|
||||
/doc/api/keys.md @marcia
|
||||
/doc/api/markdown.md @marcia
|
||||
/doc/api/merge_request_approvals.md @marcia
|
||||
/doc/api/merge_request_context_commits.md @marcia
|
||||
/doc/api/merge_requests.md @marcia
|
||||
/doc/api/project_aliases.md @marcia
|
||||
/doc/api/project_badges.md @marcia
|
||||
/doc/api/project_import_export.md @marcia
|
||||
/doc/api/project_level_variables.md @marcia
|
||||
/doc/api/project_snippets.md @marcia
|
||||
/doc/api/project_statistics.md @marcia
|
||||
/doc/api/project_templates.md @marcia
|
||||
/doc/api/project_vulnerabilities.md @marcia
|
||||
/doc/api/protected_branches.md @marcia
|
||||
/doc/api/protected_tags.md @marcia
|
||||
/doc/api/remote_mirrors.md @marcia
|
||||
/doc/api/repositories.md @marcia
|
||||
/doc/api/repository_files.md @marcia
|
||||
/doc/api/repository_submodules.md @marcia
|
||||
/doc/api/search.md @marcia
|
||||
/doc/api/snippets.md @marcia
|
||||
/doc/api/suggestions.md @marcia
|
||||
/doc/api/tags.md @marcia
|
||||
/doc/api/visual_review_discussions.md @marcia
|
||||
/doc/api/wikis.md @marcia
|
||||
/doc/user/admin_area/settings/account_and_limit_settings.md @marcia
|
||||
/doc/user/admin_area/settings/instance_template_repository.md @marcia
|
||||
/doc/user/admin_area/settings/push_event_activities_limit.md @marcia
|
||||
/doc/user/admin_area/settings/visibility_and_access_controls.md @marcia
|
||||
/doc/administration/file_hooks.md @aqualls
|
||||
/doc/administration/git_annex.md @aqualls
|
||||
/doc/administration/git_protocol.md @aqualls
|
||||
/doc/administration/invalidate_markdown_cache.md @aqualls
|
||||
/doc/administration/issue_closing_pattern.md @aqualls
|
||||
/doc/administration/merge_request_diffs.md @aqualls
|
||||
/doc/administration/repository_checks.md @aqualls
|
||||
/doc/administration/static_objects_external_storage.md @aqualls
|
||||
/doc/api/access_requests.md @aqualls
|
||||
/doc/api/branches.md @aqualls
|
||||
/doc/api/commits.md @aqualls
|
||||
/doc/api/discussions.md @aqualls
|
||||
/doc/api/group_wikis.md @aqualls
|
||||
/doc/api/keys.md @aqualls
|
||||
/doc/api/markdown.md @aqualls
|
||||
/doc/api/merge_request_approvals.md @aqualls
|
||||
/doc/api/merge_request_context_commits.md @aqualls
|
||||
/doc/api/merge_requests.md @aqualls
|
||||
/doc/api/project_aliases.md @aqualls
|
||||
/doc/api/project_badges.md @aqualls
|
||||
/doc/api/project_import_export.md @aqualls
|
||||
/doc/api/project_level_variables.md @aqualls
|
||||
/doc/api/project_snippets.md @aqualls
|
||||
/doc/api/project_statistics.md @aqualls
|
||||
/doc/api/project_templates.md @aqualls
|
||||
/doc/api/project_vulnerabilities.md @aqualls
|
||||
/doc/api/protected_branches.md @aqualls
|
||||
/doc/api/protected_tags.md @aqualls
|
||||
/doc/api/remote_mirrors.md @aqualls
|
||||
/doc/api/repositories.md @aqualls
|
||||
/doc/api/repository_files.md @aqualls
|
||||
/doc/api/repository_submodules.md @aqualls
|
||||
/doc/api/search.md @aqualls
|
||||
/doc/api/snippets.md @aqualls
|
||||
/doc/api/suggestions.md @aqualls
|
||||
/doc/api/tags.md @aqualls
|
||||
/doc/api/visual_review_discussions.md @aqualls
|
||||
/doc/api/wikis.md @aqualls
|
||||
/doc/intro/README.md @aqualls
|
||||
/doc/topics/gitlab_flow.md @aqualls
|
||||
/doc/user/admin_area/settings/account_and_limit_settings.md @aqualls
|
||||
/doc/user/admin_area/settings/instance_template_repository.md @aqualls
|
||||
/doc/user/admin_area/settings/push_event_activities_limit.md @aqualls
|
||||
/doc/user/admin_area/settings/visibility_and_access_controls.md @aqualls
|
||||
/doc/user/asciidoc.md @aqualls
|
||||
/doc/user/index.md @aqualls
|
||||
/doc/user/markdown.md @aqualls
|
||||
/doc/user/project/autocomplete_characters.md @aqualls
|
||||
/doc/user/project/badges.md @aqualls
|
||||
/doc/user/project/code_intelligence.md @aqualls
|
||||
/doc/user/project/code_owners.md @aqualls
|
||||
/doc/user/project/file_lock.md @aqualls
|
||||
/doc/user/project/git_attributes.md @aqualls
|
||||
/doc/user/project/highlighting.md @aqualls
|
||||
/doc/user/project/index.md @aqualls
|
||||
/doc/user/project/protected_branches.md @aqualls
|
||||
/doc/user/project/protected_tags.md @aqualls
|
||||
/doc/user/project/push_options.md @aqualls
|
||||
/doc/user/project/settings/import_export.md @aqualls
|
||||
/doc/user/snippets.md @aqualls
|
||||
|
||||
[Frontend]
|
||||
*.scss @annabeldunstone @gitlab-org/maintainers/frontend
|
||||
|
@ -173,7 +164,7 @@
|
|||
/.gitlab/CODEOWNERS @gl-quality/eng-prod
|
||||
Dangerfile @gl-quality/eng-prod
|
||||
/danger/ @gl-quality/eng-prod
|
||||
/lib/gitlab/danger/ @gl-quality/eng-prod
|
||||
/tooling/danger/ @gl-quality/eng-prod
|
||||
/scripts/ @gl-quality/eng-prod
|
||||
/scripts/frontend/ @gl-quality/eng-prod @gitlab-org/maintainers/frontend
|
||||
/scripts/review_apps/seed-dast-test-data.sh @dappelt @ngeorge1 @gl-quality/eng-prod
|
||||
|
@ -257,3 +248,21 @@ Dangerfile @gl-quality/eng-prod
|
|||
/lib/gitlab/usage_data.rb @gitlab-org/growth/product_intelligence/engineers
|
||||
/lib/gitlab/cycle_analytics/usage_data.rb @gitlab-org/growth/product-intelligence/engineers
|
||||
/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product-intelligence/engineers
|
||||
|
||||
[Growth Experiments]
|
||||
/app/assets/javascripts/lib/utils/experimentation.js @gitlab-org/growth/experiment-devs
|
||||
/app/experiments/ @gitlab-org/growth/experiment-devs
|
||||
/app/models/experiment.rb @gitlab-org/growth/experiment-devs
|
||||
/app/models/experiment_subject.rb @gitlab-org/growth/experiment-devs
|
||||
/app/models/experiment_user.rb @gitlab-org/growth/experiment-devs
|
||||
/app/workers/experiments/ @gitlab-org/growth/experiment-devs
|
||||
/config/feature_flags/experiment/ @gitlab-org/growth/experiment-devs
|
||||
/ee/config/feature_flags/experiment/ @gitlab-org/growth/experiment-devs
|
||||
/ee/lib/api/experiments.rb @gitlab-org/growth/experiment-devs
|
||||
/ee/lib/ee/api/entities/experiment.rb @gitlab-org/growth/experiment-devs
|
||||
/lib/gitlab/experimentation/ @gitlab-org/growth/experiment-devs
|
||||
/lib/gitlab/experimentation.rb @gitlab-org/growth/experiment-devs
|
||||
/lib/gitlab/experimentation_logger.rb @gitlab-org/growth/experiment-devs
|
||||
|
||||
[Legal]
|
||||
/config/dependency_decisions.yml @gitlab-org/legal-reviewers
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
cloud-native-image:
|
||||
extends: .cng:rules
|
||||
image: ruby:2.7-alpine
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine
|
||||
dependencies: []
|
||||
stage: post-test
|
||||
variables:
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
extends:
|
||||
- .default-retry
|
||||
- .docs:rules:review-docs
|
||||
image: ruby:2.7-alpine
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine
|
||||
stage: review
|
||||
needs: []
|
||||
variables:
|
||||
|
@ -66,13 +66,6 @@ docs-lint links:
|
|||
- bundle exec nanoc
|
||||
# Check the internal links
|
||||
- bundle exec nanoc check internal_links
|
||||
# Delete the redirect files, rebuild, and check internal links again, to see if we are linking to redirects.
|
||||
# Don't delete the documentation/index.md, which is a false positive for the simple grep.
|
||||
- grep -rl "redirect_to:" /tmp/gitlab-docs/content/ee/ | grep -v "development/documentation/index.md" | xargs rm -f
|
||||
- bundle exec nanoc
|
||||
- echo -e "\e[1;96mThe following test fails when a doc links to a redirect file."
|
||||
- echo -e "\e[1;96mMake sure all links point to the correct page."
|
||||
- bundle exec nanoc check internal_links
|
||||
# Check the internal anchor links
|
||||
- bundle exec nanoc check internal_anchors
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
extends:
|
||||
- .frontend-base
|
||||
- .assets-compile-cache
|
||||
image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-git-2.29-lfs-2.9-node-12.18-yarn-1.22-graphicsmagick-1.3.34
|
||||
image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-git-2.29-lfs-2.9-node-14.15-yarn-1.22-graphicsmagick-1.3.34
|
||||
variables:
|
||||
WEBPACK_VENDOR_DLL: "true"
|
||||
stage: prepare
|
||||
|
@ -259,13 +259,13 @@ coverage-frontend:
|
|||
|
||||
qa-frontend-node:10:
|
||||
extends: .qa-frontend-node
|
||||
image: node:dubnium
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}node:dubnium
|
||||
|
||||
qa-frontend-node:latest:
|
||||
extends:
|
||||
- .qa-frontend-node
|
||||
- .frontend:rules:qa-frontend-node-latest
|
||||
image: node:latest
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}node:latest
|
||||
|
||||
webpack-dev-server:
|
||||
extends:
|
||||
|
|
|
@ -16,15 +16,23 @@
|
|||
- source scripts/utils.sh
|
||||
- source scripts/prepare_build.sh
|
||||
|
||||
.rails-cache:
|
||||
.setup-test-env-cache:
|
||||
cache:
|
||||
key: "rails-v3"
|
||||
key: "setup-test-env-v1"
|
||||
paths:
|
||||
- vendor/ruby/
|
||||
- vendor/gitaly-ruby/
|
||||
- .go/pkg/mod/
|
||||
policy: pull
|
||||
|
||||
.rails-cache:
|
||||
cache:
|
||||
key: "rails-v4"
|
||||
paths:
|
||||
- vendor/ruby/
|
||||
- vendor/gitaly-ruby/
|
||||
policy: pull
|
||||
|
||||
.static-analysis-cache:
|
||||
cache:
|
||||
key: "static-analysis-v2"
|
||||
|
@ -71,41 +79,41 @@
|
|||
policy: pull
|
||||
|
||||
.use-pg11:
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-golang-1.14-git-2.29-lfs-2.9-chrome-85-node-12.18-yarn-1.22-postgresql-11-graphicsmagick-1.3.34"
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.34"
|
||||
services:
|
||||
- name: postgres:11.6
|
||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||
- name: redis:4.0-alpine
|
||||
- name: redis:5.0-alpine
|
||||
variables:
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
|
||||
.use-pg12:
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-golang-1.14-git-2.29-lfs-2.9-chrome-85-node-12.18-yarn-1.22-postgresql-12-graphicsmagick-1.3.34"
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.34"
|
||||
services:
|
||||
- name: postgres:12
|
||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||
- name: redis:4.0-alpine
|
||||
- name: redis:5.0-alpine
|
||||
variables:
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
|
||||
.use-pg11-ee:
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-golang-1.14-git-2.29-lfs-2.9-chrome-85-node-12.18-yarn-1.22-postgresql-11-graphicsmagick-1.3.34"
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.34"
|
||||
services:
|
||||
- name: postgres:11.6
|
||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||
- name: redis:4.0-alpine
|
||||
- name: elasticsearch:7.9.2
|
||||
- name: redis:5.0-alpine
|
||||
- name: elasticsearch:7.10.1
|
||||
command: ["elasticsearch", "-E", "discovery.type=single-node"]
|
||||
variables:
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
|
||||
.use-pg12-ee:
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-golang-1.14-git-2.29-lfs-2.9-chrome-85-node-12.18-yarn-1.22-postgresql-12-graphicsmagick-1.3.34"
|
||||
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.34"
|
||||
services:
|
||||
- name: postgres:12
|
||||
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
|
||||
- name: redis:4.0-alpine
|
||||
- name: elasticsearch:7.9.2
|
||||
- name: redis:5.0-alpine
|
||||
- name: elasticsearch:7.10.1
|
||||
command: ["elasticsearch", "-E", "discovery.type=single-node"]
|
||||
variables:
|
||||
POSTGRES_HOST_AUTH_METHOD: trust
|
||||
|
@ -124,7 +132,7 @@
|
|||
FOSS_ONLY: '1'
|
||||
|
||||
.use-docker-in-docker:
|
||||
image: docker:${DOCKER_VERSION}
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}docker:${DOCKER_VERSION}
|
||||
services:
|
||||
- docker:${DOCKER_VERSION}-dind
|
||||
variables:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.notify-slack:
|
||||
image: alpine
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}alpine
|
||||
stage: notify
|
||||
dependencies: []
|
||||
cache: {}
|
||||
|
|
|
@ -47,7 +47,7 @@ update-qa-cache:
|
|||
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
|
||||
|
||||
.package-and-qa-base:
|
||||
image: ruby:2.7-alpine
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine
|
||||
stage: qa
|
||||
retry: 0
|
||||
script:
|
||||
|
|
|
@ -141,6 +141,7 @@
|
|||
setup-test-env:
|
||||
extends:
|
||||
- .rails-job-base
|
||||
- .setup-test-env-cache
|
||||
- .rails:rules:default-refs-code-backstage-qa
|
||||
- .use-pg11
|
||||
stage: prepare
|
||||
|
@ -180,11 +181,19 @@ setup-test-env:
|
|||
- tmp/tests/second_storage/
|
||||
when: always
|
||||
|
||||
update-rails-cache:
|
||||
update-setup-test-env-cache:
|
||||
extends:
|
||||
- setup-test-env
|
||||
- .shared:rules:update-cache
|
||||
artifacts: {} # This job's purpose is only to update the cache.
|
||||
artifacts:
|
||||
paths: [] # This job's purpose is only to update the cache.
|
||||
cache:
|
||||
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
|
||||
|
||||
update-rails-cache:
|
||||
extends:
|
||||
- update-setup-test-env-cache
|
||||
- .rails-cache
|
||||
cache:
|
||||
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
|
||||
|
||||
|
@ -376,6 +385,17 @@ db:rollback:
|
|||
- bundle exec rake db:migrate VERSION=20181228175414
|
||||
- bundle exec rake db:migrate SKIP_SCHEMA_VERSION_CHECK=true
|
||||
|
||||
db:gitlabcom-database-testing:
|
||||
extends: .rails:rules:db:gitlabcom-database-testing
|
||||
stage: test
|
||||
image: ruby:2.7-alpine
|
||||
needs: []
|
||||
allow_failure: true
|
||||
script:
|
||||
- source scripts/utils.sh
|
||||
- install_gitlab_gem
|
||||
- ./scripts/trigger-build gitlab-com-database-testing
|
||||
|
||||
gitlab:setup:
|
||||
extends: .db-job-base
|
||||
variables:
|
||||
|
@ -433,6 +453,8 @@ rspec:deprecations:
|
|||
variables:
|
||||
SETUP_DB: "false"
|
||||
script:
|
||||
- grep -h -R "keyword" deprecations/ | awk '{$1=$1};1' | sort | uniq -c | sort
|
||||
- grep -R "keyword" deprecations/ | wc
|
||||
- run_timed_command "bundle exec rubocop --only Lint/LastKeywordArgument --parallel"
|
||||
artifacts:
|
||||
expire_in: 31d
|
||||
|
@ -482,7 +504,6 @@ rspec:feature-flags:
|
|||
- .coverage-base
|
||||
- .rails:rules:rspec-feature-flags
|
||||
stage: post-test
|
||||
allow_failure: true
|
||||
# We cannot use needs since it would mean needing 84 jobs (since most are parallelized)
|
||||
# so we use `dependencies` here.
|
||||
dependencies:
|
||||
|
@ -502,7 +523,11 @@ rspec:feature-flags:
|
|||
- memory-on-boot
|
||||
script:
|
||||
- run_timed_command "bundle install --jobs=$(nproc) --path=vendor --retry=3 --quiet --without default development test production puma unicorn kerberos metrics omnibus ed25519"
|
||||
- 'run_timed_command "bundle exec scripts/used-feature-flags" || (scripts/slack master-broken "☠️ \`${CI_JOB_NAME}\` failed! ☠️ See ${CI_JOB_URL}" ci_failing "GitLab Bot" && exit 1)'
|
||||
- if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]; then
|
||||
run_timed_command "bundle exec scripts/used-feature-flags" || (scripts/slack master-broken "☠️ \`${CI_JOB_NAME}\` failed! ☠️ See ${CI_JOB_URL}" ci_failing "GitLab Bot" && exit 1);
|
||||
else
|
||||
run_timed_command "bundle exec scripts/used-feature-flags";
|
||||
fi
|
||||
|
||||
# EE/FOSS: default refs (MRs, master, schedules) jobs #
|
||||
#######################################################
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
.merge-train-sync:
|
||||
# We don't need/want any global before/after commands, so we overwrite these
|
||||
# settings.
|
||||
image: alpine:edge
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}alpine:edge
|
||||
stage: sync
|
||||
before_script:
|
||||
- apk add --no-cache --update curl bash jq
|
||||
|
|
|
@ -25,7 +25,7 @@ review-build-cng:
|
|||
extends:
|
||||
- .default-retry
|
||||
- .review:rules:review-build-cng
|
||||
image: ruby:2.7-alpine
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine
|
||||
stage: review-prepare
|
||||
before_script:
|
||||
- source ./scripts/utils.sh
|
||||
|
@ -199,7 +199,7 @@ review-performance:
|
|||
parallel-spec-reports:
|
||||
extends:
|
||||
- .review:rules:mr-only-manual
|
||||
image: ruby:2.7-alpine
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine
|
||||
stage: post-qa
|
||||
dependencies: ["review-qa-all"]
|
||||
variables:
|
||||
|
|
|
@ -112,6 +112,7 @@
|
|||
.workhorse-patterns: &workhorse-patterns
|
||||
- "GITLAB_WORKHORSE_VERSION"
|
||||
- "workhorse/**/*"
|
||||
- ".gitlab/ci/workhorse.gitlab-ci.yml"
|
||||
|
||||
.yaml-lint-patterns: &yaml-lint-patterns
|
||||
- ".gitlab-ci.yml"
|
||||
|
@ -123,9 +124,12 @@
|
|||
- ".gitlab/route-map.yml"
|
||||
- "doc/**/*"
|
||||
- ".markdownlint.json"
|
||||
- "scripts/lint-doc.sh"
|
||||
|
||||
.frontend-dependency-patterns: &frontend-dependency-patterns
|
||||
- "{package.json,yarn.lock}"
|
||||
- "config/webpack.config.js"
|
||||
- "config/helpers/*.js"
|
||||
|
||||
.frontend-patterns: &frontend-patterns
|
||||
- "{package.json,yarn.lock}"
|
||||
|
@ -523,6 +527,13 @@
|
|||
changes: *db-patterns
|
||||
- <<: *if-merge-request-title-run-all-rspec
|
||||
|
||||
.rails:rules:db:gitlabcom-database-testing:
|
||||
rules:
|
||||
- if: '$GITLABCOM_DATABASE_TESTING_TRIGGER_TOKEN == null'
|
||||
when: never
|
||||
- <<: *if-merge-request
|
||||
changes: *db-patterns
|
||||
|
||||
.rails:rules:ee-and-foss-unit:
|
||||
rules:
|
||||
- changes: *backend-patterns
|
||||
|
@ -869,6 +880,7 @@
|
|||
- <<: *if-not-ee
|
||||
when: never
|
||||
- <<: *if-master-schedule-2-hourly
|
||||
allow_failure: true
|
||||
- <<: *if-merge-request-title-run-all-rspec
|
||||
|
||||
.rails:rules:master-schedule-nightly--code-backstage:
|
||||
|
|
|
@ -26,7 +26,7 @@ cache gems:
|
|||
dont-interrupt-me:
|
||||
extends: .setup:rules:dont-interrupt-me
|
||||
stage: sync
|
||||
image: alpine:edge
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}alpine:edge
|
||||
interruptible: false
|
||||
variables:
|
||||
GIT_STRATEGY: none
|
||||
|
@ -52,7 +52,7 @@ no_ee_check:
|
|||
verify-tests-yml:
|
||||
extends:
|
||||
- .setup:rules:verify-tests-yml
|
||||
image: ruby:2.7-alpine
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine
|
||||
stage: test
|
||||
needs: []
|
||||
script:
|
||||
|
@ -61,7 +61,7 @@ verify-tests-yml:
|
|||
- scripts/verify-tff-mapping
|
||||
|
||||
.detect-test-base:
|
||||
image: ruby:2.7
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7
|
||||
needs: []
|
||||
stage: prepare
|
||||
script:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.tests-metadata-state:
|
||||
image: ruby:2.7
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7
|
||||
before_script:
|
||||
- source scripts/utils.sh
|
||||
artifacts:
|
||||
|
|
11
.gitlab/ci/verify-lockfile.gitlab-ci.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
verify_lockfile:
|
||||
stage: test
|
||||
image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-git-2.29-lfs-2.9-node-14.15-yarn-1.22-graphicsmagick-1.3.34
|
||||
needs: []
|
||||
rules:
|
||||
- changes:
|
||||
- yarn.lock
|
||||
script:
|
||||
- npm config set @dappelt:registry https://gitlab.com/api/v4/projects/22564149/packages/npm/
|
||||
- npx lockfile-lint@4.3.7 --path yarn.lock --allowed-hosts yarn --validate-https
|
||||
- npx @dappelt/untamper-my-lockfile --lockfile yarn.lock
|
|
@ -1,6 +1,6 @@
|
|||
workhorse:
|
||||
extends: .workhorse:rules:workhorse
|
||||
image: golang:1.14
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}golang:1.14
|
||||
stage: test
|
||||
needs: []
|
||||
script:
|
||||
|
@ -8,3 +8,39 @@ workhorse:
|
|||
- git checkout .
|
||||
- scripts/update-workhorse check
|
||||
- make -C workhorse
|
||||
|
||||
workhorse:verify:
|
||||
extends: .workhorse:rules:workhorse
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}golang:1.15
|
||||
stage: test
|
||||
needs: []
|
||||
script:
|
||||
- make -C workhorse verify
|
||||
|
||||
.workhorse:test:
|
||||
extends: .workhorse:rules:workhorse
|
||||
services:
|
||||
- name: registry.gitlab.com/gitlab-org/build/cng/gitaly:latest
|
||||
# Disable the hooks so we don't have to stub the GitLab API
|
||||
command: ["/usr/bin/env", "GITALY_TESTING_NO_GIT_HOOKS=1", "/scripts/process-wrapper"]
|
||||
alias: gitaly
|
||||
variables:
|
||||
GITALY_ADDRESS: "tcp://gitaly:8075"
|
||||
stage: test
|
||||
needs: []
|
||||
script:
|
||||
- go version
|
||||
- apt-get update && apt-get -y install libimage-exiftool-perl
|
||||
- make -C workhorse test
|
||||
|
||||
workhorse:test using go 1.13:
|
||||
extends: .workhorse:test
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}golang:1.13
|
||||
|
||||
workhorse:test using go 1.14:
|
||||
extends: .workhorse:test
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}golang:1.14
|
||||
|
||||
workhorse:test using go 1.15:
|
||||
extends: .workhorse:test
|
||||
image: ${GITLAB_DEPENDENCY_PROXY}golang:1.15
|
||||
|
|
28
.gitlab/issue_templates/Actionable Insight.md
Normal file
|
@ -0,0 +1,28 @@
|
|||
<!-- Actionable insights must recommend an action that needs to take place. An actionable insight both defines the insight and clearly calls out action or next step required to improve based on the result of the research observation or data. Actionable insights are tracked over time and will include follow-up. Learn more in the handbook here: https://about.gitlab.com/handbook/engineering/ux/ux-research-training/research-insights/#actionable-insights -->
|
||||
|
||||
### Insight
|
||||
<!-- Describe the insight itself: often the problem, finding, or observation. -->
|
||||
|
||||
### Supporting evidence
|
||||
<!-- Describe why the problem is happening, or more details behind the finding or observation. Try to include quotes or specific data collected. Feel free to link the Actionable insight from Dovetail here if applicable instead of retyping details. -->
|
||||
|
||||
### Action
|
||||
<!--Describe the next step or action that needs to take place as a result of the research. The action should be clearly defined, achievable, and directly tied back to the insight. Make sure to use directive terminology, such as: conduct, explore, redesign, etc. -->
|
||||
|
||||
### Resources
|
||||
<!--Add resources as links below or as related issues. -->
|
||||
|
||||
- :dove: [Dovetail project](Paste URL for Dovetail project here)
|
||||
- :mag: [Research issue](Paste URL for research issue here)
|
||||
- :footprints: [Follow-up issue or epic](Paste URL for follow-up issue or epic here)
|
||||
|
||||
### Tasks
|
||||
- [ ] Assign this issue to the appropriate Product Manager, Product Designer, or UX Researcher.
|
||||
- [ ] Add the appropriate `Group` (such as `~"group::source code"`) label to the issue. This helps identify and track actionable insights at the group level.
|
||||
- [ ] Link this issue back to the original research issue in the GitLab UX Research project and the Dovetail project.
|
||||
|
||||
|
||||
|
||||
|
||||
/label ~"Actionable Insight"
|
||||
|
14
.gitlab/issue_templates/Adoption Engineering.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
#Design
|
||||
<!-- This should include the contexts that determine the reproducibility (stickiness) of an experiment. This means that if you want the same behavior for a user, the context would be user, or if you want all users when viewing a specific project, the context would be the project being viewed, etc. -->
|
||||
|
||||
|
||||
#Rollout strategy
|
||||
<!-- This is currently called A/B test, which isn't accurate for multi-variants. Let's call this rollout strategy. It should outline the percentages for variants and if there's more than one step to this, each of those steps and the timing for those steps (e.g. 30 days after initial rollout). -->
|
||||
|
||||
#Inclusions and exclusions
|
||||
<!-- These would be the rules for which given context (and are limited to context or resolvable at experiment time details) is included or excluded from the test. An example of this would be to only run an experiment on groups less than N number of days old. -->
|
||||
|
||||
#Segmentation
|
||||
<!-- Rules for always saying context with these criteria always get this variant. For instance, if you want to always give groups less than N number of days old the experiment experience, they are specified here. This is different from the exclusion rules above. -->
|
||||
|
||||
#Tracking
|
|
@ -6,6 +6,6 @@
|
|||
|
||||
<!-- Consider adding related issues and epics to this issue. You can also reference the Feature Proposal Template (https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Feature%20proposal.md) for additional details to consider adding to this issue. Additionally, as a data oriented organization, when your feature exits planning breakdown, consider adding the `What does success look like, and how can we measure that?` section.
|
||||
|
||||
/label ~"group::" ~"section::" ~"Category::" ~"GitLab Core"/~"GitLab Starter"/~"GitLab Premium"/~"GitLab Ultimate"
|
||||
/label ~"group::" ~"section::" ~"Category::" ~"GitLab Core"/~"GitLab Premium"/~"GitLab Ultimate"
|
||||
|
||||
-->
|
||||
|
|
17
.gitlab/issue_templates/Dogfooding.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
<!--Lightweight issue template to encourage Dogfooding and educate team members about the importance of Dogfooding -->
|
||||
|
||||
/label ~"dogfooding" ~"group::" ~"section::" ~"Category::"
|
||||
|
||||
## Feature to Dogfood
|
||||
<!--Link to Description of feature (Documentation, Epic, Opportunity Canvas, etc.) -->
|
||||
|
||||
## Goals
|
||||
<!--Level of Dogfooding you are looking for: problem validation, testing, production usage, etc -->
|
||||
|
||||
## Progress Tracker
|
||||
<!--List of tasks (e.g. a table with columns, project, status, issue links similar to what is [done here](https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/8499))-->
|
||||
|
||||
## Why Dogfooding is Important
|
||||
- https://about.gitlab.com/handbook/values/#dogfooding
|
||||
- https://about.gitlab.com/handbook/product/product-processes/#dogfood-everything
|
||||
- https://about.gitlab.com/handbook/engineering/#dogfooding
|
|
@ -31,7 +31,6 @@ If applicable, any groups/projects that are happy to have this feature turned on
|
|||
|
||||
## Roll Out Steps
|
||||
|
||||
- [ ] Confirm that QA tests pass with the feature flag enabled (if you're unsure how, contact the relevant [stable counterpart in the Quality department](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors))
|
||||
- [ ] Enable on staging (`/chatops run feature set feature_name true --staging`)
|
||||
- [ ] Test on staging
|
||||
- [ ] Ensure that documentation has been updated
|
||||
|
@ -42,7 +41,7 @@ If applicable, any groups/projects that are happy to have this feature turned on
|
|||
- [ ] Enable on GitLab.com by running chatops command in `#production` (`/chatops run feature set feature_name true`)
|
||||
- [ ] Cross post chatops Slack command to `#support_gitlab-com` ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#where-to-run-commands)) and in your team channel
|
||||
- [ ] Announce on the issue that the flag has been enabled
|
||||
- [ ] Remove feature flag and add changelog entry
|
||||
- [ ] Remove feature flag and add changelog entry. Ensure that the feature flag definition YAML file has been removed in the **same MR** that is removing the feature flag from the code
|
||||
- [ ] After the flag removal is deployed, [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel
|
||||
|
||||
## Rollback Steps
|
||||
|
|
|
@ -61,7 +61,7 @@ Consider adding checkboxes and expectations of users with certain levels of memb
|
|||
|
||||
<!-- See the Feature Change Documentation Workflow https://docs.gitlab.com/ee/development/documentation/workflow.html#for-a-product-change
|
||||
|
||||
* Add all known Documentation Requirements in this section. See https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#documentation-requirements
|
||||
* Add all known Documentation Requirements in this section. See https://docs.gitlab.com/ee/development/documentation/workflow.html
|
||||
* If this feature requires changing permissions, update the permissions document. See https://docs.gitlab.com/ee/user/permissions.html -->
|
||||
|
||||
### Availability & Testing
|
||||
|
@ -97,7 +97,7 @@ Create tracking issue using the the Snowplow event tracking template. See https:
|
|||
### What is the type of buyer?
|
||||
|
||||
<!-- What is the buyer persona for this feature? See https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/buyer-persona/
|
||||
In which enterprise tier should this feature go? See https://about.gitlab.com/handbook/product/pricing/#four-tiers -->
|
||||
In which enterprise tier should this feature go? See https://about.gitlab.com/handbook/product/pricing/#three-tiers -->
|
||||
|
||||
### Is this a cross-stage feature?
|
||||
|
||||
|
@ -111,5 +111,5 @@ Use the following resources to find the appropriate labels:
|
|||
- https://about.gitlab.com/handbook/product/categories/features/
|
||||
-->
|
||||
/label ~devops:: ~group: ~Category:
|
||||
|
||||
/label ~"GitLab Core"/~"GitLab Premium"/~"GitLab Ultimate"
|
||||
/label ~feature
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
|
||||
|
||||
/label ~"feature" ~"group::" ~"section::" ~"Category::" ~"GitLab Core"/~"GitLab Starter"/~"GitLab Premium"/~"GitLab Ultimate"
|
||||
/label ~"feature" ~"group::" ~"section::" ~"Category::" ~"GitLab Core"/~"GitLab Premium"/~"GitLab Ultimate"
|
||||
|
||||
|
||||
<!--- Use the following resources to find the appropriate labels:
|
||||
|
@ -73,7 +73,7 @@ Consider adding checkboxes and expectations of users with certain levels of memb
|
|||
|
||||
See the Feature Change Documentation Workflow https://docs.gitlab.com/ee/development/documentation/workflow.html#for-a-product-change
|
||||
|
||||
* Add all known Documentation Requirements in this section. See https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#documentation-requirements
|
||||
* Add all known Documentation Requirements in this section. See https://docs.gitlab.com/ee/development/documentation/workflow.html
|
||||
* If this feature requires changing permissions, update the permissions document. See https://docs.gitlab.com/ee/user/permissions.html
|
||||
|
||||
### Availability & Testing
|
||||
|
@ -96,7 +96,7 @@ Define both the success metrics and acceptance criteria. Note that success metri
|
|||
### What is the type of buyer?
|
||||
|
||||
What is the buyer persona for this feature? See https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/buyer-persona/
|
||||
In which enterprise tier should this feature go? See https://about.gitlab.com/handbook/product/pricing/#four-tiers
|
||||
In which enterprise tier should this feature go? See https://about.gitlab.com/handbook/product/pricing/#three-tiers
|
||||
|
||||
### Is this a cross-stage feature?
|
||||
|
||||
|
|
39
.gitlab/issue_templates/Query Performance Investigation.md
Normal file
|
@ -0,0 +1,39 @@
|
|||
## Description
|
||||
|
||||
As the name implies, the purpose of the template is to detail underperforming queries for futher investigation.
|
||||
|
||||
### Steps
|
||||
|
||||
- [ ] Rename the issue to - `Query Performance Investigation - [Query Snippet | Table info]`
|
||||
- For example - `Query Performance Investigation - SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" = $1 LIMIT $2`
|
||||
- [ ] Provide information in the Requested Data Points table
|
||||
- [ ] Provide [priority and severity labels](https://about.gitlab.com/handbook/engineering/quality/issue-triage/#availability)
|
||||
- [ ] If this requires immediate attention cc `@gitlab-org/database-team` and reach out in the #g_database slack channel
|
||||
|
||||
### Requested Data points
|
||||
|
||||
Please provide as many of these fields as possible when submitting a query performance report.
|
||||
|
||||
- TPS
|
||||
- Duration
|
||||
- Source of calls (Sidekiq, WebAPI, etc)
|
||||
- Query ID
|
||||
- SQL Statement
|
||||
- Query Plan
|
||||
- Query Example
|
||||
- Total number of calls (relative)
|
||||
- % of Total time
|
||||
|
||||
<!--
|
||||
|
||||
- Example of a postgres checkup report - https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/snippets/2056787
|
||||
- Epic - Improving the Database resource usage (&365) - https://gitlab.com/groups/gitlab-com/gl-infra/-/epics/365#short-term-query-improvements
|
||||
- Past examples of query performance investigations that have led to this template creation.
|
||||
- Possible Index suggestion or query rewriting (#292454) - https://gitlab.com/gitlab-org/gitlab/-/issues/292454)
|
||||
- High number of Sessions to the database with the value SET parameter (#292022) - https://gitlab.com/gitlab-org/gitlab/-/issues/292022)
|
||||
- Query performance "Select 1" (#220055) - https://gitlab.com/gitlab-org/gitlab/-/issues/220055
|
||||
- Select statements that are in execution during database CPU utilization peak times - licenses table (#292900) - https://gitlab.com/gitlab-org/gitlab/-/issues/292900
|
||||
|
||||
-->
|
||||
|
||||
/label ~"group::database" ~"database::triage"
|
|
@ -1,7 +1,7 @@
|
|||
<!--
|
||||
# Read me first!
|
||||
|
||||
Create this issue under https://gitlab.com/gitlab-org/security
|
||||
Create this issue under https://gitlab.com/gitlab-org/security/gitlab
|
||||
|
||||
Set the title to: `Description of the original issue`
|
||||
-->
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
## Actionable Insights
|
||||
Actionable insights always have a follow-up action that needs to take place as a result of the research observation or data, and a clear recommendation or action associated with it. An actionable insight both defines the insight and clearly calls out the next step. These insights are tracked over time and at the group level.
|
||||
|
||||
#### Link
|
||||
|
||||
- [ ] Provide the link to the Dovetail actionable insight you created earlier (this should contain all the essential details)
|
||||
- [ ] If applicable, link this actionable insight issue back to the original Research Issue in the GitLab UX Research project
|
||||
|
||||
#### Assign
|
||||
|
||||
- [ ] Assign this issue to the appropriate Product Manager, Product Designer, or UX Researcher
|
||||
|
||||
#### Group label
|
||||
|
||||
- [ ] Add the appropriate `Group` (such as `~"group::source code"`) label to the issue. This is done to identify and track actionable insights at the group level.
|
||||
|
||||
#### Description
|
||||
|
||||
- [ ] Provide some brief details on the actionable insight and the action to take
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
| | PLEASE COMPLETE THE BELOW |
|
||||
| ------ | ------ |
|
||||
| Dovetail link: | (URL goes here) |
|
||||
| Details: | (details go here) |
|
||||
| Action to take: | (action goes here) |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/label ~"Actionable Insight"
|
|
@ -8,9 +8,7 @@
|
|||
|
||||
## Related issues
|
||||
|
||||
<!-- Mention the issue(s) this MR closes or is related to -->
|
||||
|
||||
Closes
|
||||
<!-- Link related issues below. -->
|
||||
|
||||
## Moving docs to a new location?
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
## Related issues
|
||||
|
||||
<!-- Link related issues below. Insert the issue link or reference after the word "Closes" if merging this should automatically close it. -->
|
||||
<!-- Link related issues below. -->
|
||||
|
||||
## Author's checklist (required)
|
||||
|
||||
|
@ -31,13 +31,13 @@ When applicable:
|
|||
|
||||
- [ ] Update the [permissions table](https://docs.gitlab.com/ee/user/permissions.html).
|
||||
- [ ] Link docs to and from the higher-level index page, plus other related docs where helpful.
|
||||
- [ ] Add the [product tier badge](https://docs.gitlab.com/ee/development/documentation/styleguide.html#product-badges) accordingly.
|
||||
- [ ] Add [GitLab's version history note(s)](https://docs.gitlab.com/ee/development/documentation/styleguide.html#text-for-documentation-requiring-version-text).
|
||||
- [ ] Add the [product tier badge](https://docs.gitlab.com/ee/development/documentation/styleguide/index.html#product-tier-badges) accordingly.
|
||||
- [ ] Add [GitLab's version history note(s)](https://docs.gitlab.com/ee/development/documentation/styleguide/index.html#gitlab-versions).
|
||||
- [ ] Add/update the [feature flag section](https://docs.gitlab.com/ee/development/documentation/feature_flags.html).
|
||||
|
||||
## Review checklist
|
||||
|
||||
All reviewers can help ensure accuracy, clarity, completeness, and adherence to the [Documentation Guidelines](https://docs.gitlab.com/ee/development/documentation/) and [Style Guide](https://docs.gitlab.com/ee/development/documentation/styleguide.html).
|
||||
All reviewers can help ensure accuracy, clarity, completeness, and adherence to the [Documentation Guidelines](https://docs.gitlab.com/ee/development/documentation/) and [Style Guide](https://docs.gitlab.com/ee/development/documentation/styleguide/).
|
||||
|
||||
**1. Primary Reviewer**
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
<!--
|
||||
When creating a new cop that could be applied to multiple applications,
|
||||
we encourage you to add it to https://gitlab.com/gitlab-org/gitlab-styles gem.
|
||||
-->
|
||||
|
||||
## Description of the proposal
|
||||
|
||||
<!--
|
||||
|
|
12
.gitpod.yml
|
@ -13,7 +13,10 @@ tasks:
|
|||
(
|
||||
set -e
|
||||
cd /workspace/gitlab-development-kit
|
||||
[[ ! -L /workspace/gitlab-development-kit/gitlab ]] && ln -fs /workspace/gitlab /workspace/gitlab-development-kit/gitlab
|
||||
# GitLab FOSS
|
||||
[[ -d /workspace/gitlab-foss ]] && ln -fs /workspace/gitlab-foss /workspace/gitlab-development-kit/gitlab
|
||||
# GitLab
|
||||
[[ -d /workspace/gitlab ]] && ln -fs /workspace/gitlab /workspace/gitlab-development-kit/gitlab
|
||||
mv /workspace/gitlab-development-kit/secrets.yml /workspace/gitlab-development-kit/gitlab/config
|
||||
# reconfigure GDK
|
||||
echo "$(date) – Reconfiguring GDK" | tee -a /workspace/startup.log
|
||||
|
@ -21,7 +24,6 @@ tasks:
|
|||
# run DB migrations
|
||||
echo "$(date) – Running DB migrations" | tee -a /workspace/startup.log
|
||||
make gitlab-db-migrate
|
||||
cd -
|
||||
# stop GDK
|
||||
echo "$(date) – Stopping GDK" | tee -a /workspace/startup.log
|
||||
gdk stop
|
||||
|
@ -47,9 +49,11 @@ tasks:
|
|||
if [ "$GITLAB_RUN_DB_MIGRATIONS" == true ]; then
|
||||
make gitlab-db-migrate
|
||||
fi
|
||||
cd ../gitlab
|
||||
cd /workspace/gitlab-development-kit/gitlab
|
||||
# Install Lefthook
|
||||
bundle exec lefthook install
|
||||
git checkout db/structure.sql
|
||||
cd ../gitlab-development-kit
|
||||
cd /workspace/gitlab-development-kit
|
||||
# Waiting for GitLab ...
|
||||
gp await-port 3000
|
||||
printf "Waiting for GitLab at $(gp url 3000) ..."
|
||||
|
|
|
@ -109,7 +109,6 @@ linters:
|
|||
- 'app/views/groups/runners/edit.html.haml'
|
||||
- 'app/views/groups/settings/_advanced.html.haml'
|
||||
- 'app/views/groups/settings/_lfs.html.haml'
|
||||
- 'app/views/help/_shortcuts.html.haml'
|
||||
- 'app/views/help/index.html.haml'
|
||||
- 'app/views/help/instance_configuration.html.haml'
|
||||
- 'app/views/help/instance_configuration/_gitlab_ci.html.haml'
|
||||
|
@ -161,7 +160,6 @@ linters:
|
|||
- 'app/views/projects/_gitlab_import_modal.html.haml'
|
||||
- 'app/views/projects/_home_panel.html.haml'
|
||||
- 'app/views/projects/_import_project_pane.html.haml'
|
||||
- 'app/views/projects/_issuable_by_email.html.haml'
|
||||
- 'app/views/projects/_readme.html.haml'
|
||||
- 'app/views/projects/artifacts/_artifact.html.haml'
|
||||
- 'app/views/projects/artifacts/_tree_file.html.haml'
|
||||
|
|
2
.nvmrc
|
@ -1 +1 @@
|
|||
12.18.4
|
||||
14.15.4
|
||||
|
|
18
.rubocop.yml
|
@ -78,21 +78,7 @@ Style/AccessModifierDeclarations:
|
|||
# Frozen String Literal
|
||||
Style/FrozenStringLiteralComment:
|
||||
Enabled: true
|
||||
Exclude:
|
||||
- 'config.ru'
|
||||
- 'Dangerfile'
|
||||
- 'Gemfile'
|
||||
- 'Rakefile'
|
||||
- 'app/views/**/*'
|
||||
- 'config/**/*'
|
||||
- 'danger/**/*'
|
||||
- 'db/**/*'
|
||||
- 'ee/db/**/*'
|
||||
- 'ee/lib/tasks/**/*'
|
||||
- 'lib/tasks/**/*'
|
||||
- 'qa/**/*'
|
||||
- 'rubocop/**/*'
|
||||
- 'scripts/**/*'
|
||||
EnforcedStyle: always_true
|
||||
|
||||
RSpec/FilePath:
|
||||
Exclude:
|
||||
|
@ -256,7 +242,7 @@ Gitlab/Json:
|
|||
- 'scripts/**/*'
|
||||
- 'lib/rspec_flaky/**/*'
|
||||
- 'lib/quality/**/*'
|
||||
- 'lib/gitlab/danger/**/*'
|
||||
- 'tooling/danger/**/*'
|
||||
|
||||
Gitlab/AvoidUploadedFileFromParams:
|
||||
Enabled: true
|
||||
|
|
|
@ -141,7 +141,7 @@ Lint/BinaryOperatorWithIdenticalOperands:
|
|||
- 'ee/spec/lib/ee/gitlab/application_context_spec.rb'
|
||||
- 'spec/helpers/visibility_level_helper_spec.rb'
|
||||
- 'spec/lib/gitlab/conan_token_spec.rb'
|
||||
- 'spec/lib/gitlab/danger/sidekiq_queues_spec.rb'
|
||||
- 'spec/tooling/danger/sidekiq_queues_spec.rb'
|
||||
- 'spec/lib/gitlab/git/conflict/parser_spec.rb'
|
||||
- 'spec/lib/gitlab/graphql/lazy_spec.rb'
|
||||
- 'spec/models/ci/build_trace_chunk_spec.rb'
|
||||
|
@ -155,20 +155,6 @@ Lint/BinaryOperatorWithIdenticalOperands:
|
|||
Lint/ConstantDefinitionInBlock:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 9
|
||||
# Cop supports --auto-correct.
|
||||
Lint/DeprecatedOpenSSLConstant:
|
||||
Exclude:
|
||||
- 'app/services/clusters/kubernetes/configure_istio_ingress_service.rb'
|
||||
- 'ee/lib/gitlab/geo/oauth/logout_state.rb'
|
||||
- 'lib/gitlab/conan_token.rb'
|
||||
- 'lib/gitlab/gitaly_client.rb'
|
||||
- 'lib/gitlab/kubernetes/helm/v2/certificate.rb'
|
||||
- 'spec/lib/gitlab/conan_token_spec.rb'
|
||||
- 'spec/services/pages_domains/obtain_lets_encrypt_certificate_service_spec.rb'
|
||||
- 'spec/support/helpers/smime_helper.rb'
|
||||
- 'spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb'
|
||||
|
||||
# Offense count: 1
|
||||
Lint/DuplicateRequire:
|
||||
Exclude:
|
||||
|
@ -185,8 +171,8 @@ Lint/EmptyFile:
|
|||
# Cop supports --auto-correct.
|
||||
Lint/IdentityComparison:
|
||||
Exclude:
|
||||
- 'spec/lib/gitlab/danger/weightage/maintainers_spec.rb'
|
||||
- 'spec/lib/gitlab/danger/weightage/reviewers_spec.rb'
|
||||
- 'spec/tooling/danger/weightage/maintainers_spec.rb'
|
||||
- 'spec/tooling/danger/weightage/reviewers_spec.rb'
|
||||
|
||||
# Offense count: 184
|
||||
# Configuration parameters: MaximumRangeSize.
|
||||
|
@ -263,7 +249,7 @@ Metrics/CyclomaticComplexity:
|
|||
- 'lib/banzai/filter/abstract_reference_filter.rb'
|
||||
- 'lib/declarative_policy/runner.rb'
|
||||
- 'lib/gitlab/conflict/file.rb'
|
||||
- 'lib/gitlab/danger/roulette.rb'
|
||||
- 'tooling/danger/roulette.rb'
|
||||
- 'lib/gitlab/diff/parser.rb'
|
||||
- 'lib/gitlab/rack_attack.rb'
|
||||
- 'lib/gitlab/sidekiq_cluster/cli.rb'
|
||||
|
@ -285,7 +271,7 @@ Metrics/PerceivedComplexity:
|
|||
- 'lib/banzai/renderer.rb'
|
||||
- 'lib/declarative_policy/runner.rb'
|
||||
- 'lib/gitlab/conflict/file.rb'
|
||||
- 'lib/gitlab/danger/roulette.rb'
|
||||
- 'tooling/danger/roulette.rb'
|
||||
- 'lib/gitlab/rack_attack.rb'
|
||||
- 'lib/gitlab/sidekiq_cluster/cli.rb'
|
||||
- 'lib/gitlab/utils/merge_hash.rb'
|
||||
|
@ -629,7 +615,7 @@ Rails/IndexBy:
|
|||
- 'ee/lib/gitlab/analytics/type_of_work/tasks_by_type.rb'
|
||||
- 'ee/lib/gitlab/elastic/document_reference.rb'
|
||||
- 'ee/lib/gitlab/group_plans_preloader.rb'
|
||||
- 'lib/gitlab/danger/sidekiq_queues.rb'
|
||||
- 'tooling/danger/sidekiq_queues.rb'
|
||||
- 'lib/gitlab/database/count/reltuples_count_strategy.rb'
|
||||
- 'lib/gitlab/language_detection.rb'
|
||||
|
||||
|
|
21
.stylelintrc
|
@ -1,4 +1,10 @@
|
|||
{
|
||||
"ignoreFiles": [
|
||||
"app/assets/stylesheets/pages/emojis.scss",
|
||||
"app/assets/stylesheets/startup/startup-*.scss",
|
||||
"app/assets/stylesheets/lazy_bundles/select2.scss",
|
||||
"app/assets/stylesheets/highlight/themes/*.scss"
|
||||
],
|
||||
"plugins":[
|
||||
"./scripts/frontend/stylelint/stylelint-duplicate-selectors.js",
|
||||
"./scripts/frontend/stylelint/stylelint-utility-classes.js",
|
||||
|
@ -47,7 +53,7 @@
|
|||
"indentation":2,
|
||||
"length-zero-no-unit":true,
|
||||
"max-nesting-depth":[
|
||||
3,
|
||||
6,
|
||||
{
|
||||
"ignoreAtRules":[
|
||||
"each",
|
||||
|
@ -97,15 +103,22 @@
|
|||
}
|
||||
],
|
||||
"selector-list-comma-newline-after":"always",
|
||||
"selector-max-compound-selectors":[3, { "severity": "warning" }],
|
||||
"selector-max-compound-selectors":[6, { "severity": "warning" }],
|
||||
"selector-max-id":1,
|
||||
"selector-no-vendor-prefix":true,
|
||||
"selector-pseudo-element-colon-notation":"double",
|
||||
"selector-pseudo-element-no-unknown":true,
|
||||
"shorthand-property-no-redundant-values":true,
|
||||
"string-quotes":"single",
|
||||
"value-no-vendor-prefix":[true, { "ignoreValues": ["sticky"] }],
|
||||
"value-no-vendor-prefix": [true, { "ignoreValues": ["sticky"] }],
|
||||
"stylelint-gitlab/duplicate-selectors":[true,{ "severity": "warning" }],
|
||||
"stylelint-gitlab/utility-classes":[true,{ "severity": "warning" }]
|
||||
"stylelint-gitlab/utility-classes":[true,{ "severity": "warning" }],
|
||||
"declaration-block-no-duplicate-properties": [
|
||||
true,
|
||||
{
|
||||
"ignore": ["consecutive-duplicates"]
|
||||
}
|
||||
],
|
||||
"no-eol-whitespace": true,
|
||||
}
|
||||
}
|
||||
|
|
658
CHANGELOG.md
|
@ -2,18 +2,614 @@
|
|||
documentation](doc/development/changelog.md) for instructions on adding your own
|
||||
entry.
|
||||
|
||||
## 13.8.5 (2021-03-04)
|
||||
## 13.9.3 (2021-03-08)
|
||||
|
||||
### Fixed (4 changes)
|
||||
|
||||
- Upgrade gitlab-shell to v13.17.0. !55295
|
||||
- Update Kroki to fix Wavedrom graphs. !55659
|
||||
- Fix disabling of Kroki optional formats. !55665
|
||||
- Rename asset_proxy_allowlist column. !55884
|
||||
|
||||
|
||||
## 13.9.2 (2021-03-04)
|
||||
|
||||
### Security (6 changes)
|
||||
|
||||
- Fix XSS in wiki author email and name.
|
||||
- Bump thrift gem to 0.14.0.
|
||||
- Allow only owners to manage group variables.
|
||||
- Do not store marshalled sessions ids in Redis.
|
||||
- Fix XSS in wiki author email and name.
|
||||
- Workhorse: prevent escaped router path traversal.
|
||||
- Fix XSS vulnerability for swagger file viewer.
|
||||
|
||||
|
||||
## 13.9.1 (2021-02-23)
|
||||
|
||||
### Fixed (6 changes, 1 of them is from the community)
|
||||
|
||||
- Send SIGINT instead of SIGQUIT to puma. !54446 (Jörg Behrmann @behrmann)
|
||||
- Reset description template names cache key to reload an updated templates structure. !54614
|
||||
- Restore missing horizontal scrollbar on issue boards. !54634
|
||||
- Fix keep latest artifacts checkbox being always disabled. !54669
|
||||
- Fix Metric tab not showing up on operations page. !54736
|
||||
- Fix S3 object storage failing when endpoint is not specified. !54868
|
||||
|
||||
### Changed (1 change)
|
||||
|
||||
- Updates authorization for linting endpoint. !54492
|
||||
|
||||
### Performance (1 change)
|
||||
|
||||
- Fix N+1 SQL regression in exporting issues to CSV. !54287
|
||||
|
||||
### Other (1 change)
|
||||
|
||||
- Fix creating the idx_on_issues_where_service_desk_reply_to_is_not_null index before the post migration. !54346
|
||||
|
||||
|
||||
## 13.9.0 (2021-02-22)
|
||||
|
||||
### Security (1 change)
|
||||
|
||||
- Add token_with_iv table.
|
||||
|
||||
### Removed (4 changes)
|
||||
|
||||
- Remove implicit FF check on `Featurable`. !52223
|
||||
- Remove merge_request_reviewers feature flag. !52468
|
||||
- Removed unused Text dropdown. !53464
|
||||
- Remove legacy alerts service data and table. !53534
|
||||
|
||||
### Fixed (131 changes, 29 of them are from the community)
|
||||
|
||||
- Allow to retrieve all jobs for a given pipeline. !48589 (Alexander Kutelev)
|
||||
- Include submodule information for files in diff metadata. !50346 (Simon Stieger @sim0)
|
||||
- Fix "Stay on Page" alert showing in empty snippet. !50400 (Kev @KevSlashNull)
|
||||
- Add css to fix fluid layout for index file. !50626
|
||||
- Make System OAuth app index table responsive and externalize text. !50979 (Kev @KevSlashNull)
|
||||
- Prevent long variable names from overflowing the popover in CI/CD settings. !51018 (Kev @KevSlashNull)
|
||||
- Fix long CI variable name overflows on origin. !51021 (Kev @KevSlashNull)
|
||||
- Fix breadcrumb dropdown on mobile being too narrow. !51092 (Kev @KevSlashNull)
|
||||
- Show correct ref name in code coverage statistics header. !51385 (Andreas Schmidt)
|
||||
- Change Jira Connect update sequence id to use Unix Time. !51697
|
||||
- Fix batch query issue when primary key is -1. !51716
|
||||
- Allow versionless maven-metadata.xml file duplicates even when maven duplicates are disabled. !51758
|
||||
- Fix comment form dropdown check alignment. !51787 (Lee Tickett @leetickett)
|
||||
- Schedule artifact expiry date backfill background jobs. !51822
|
||||
- Fix alignment and font issues in project operations settings page. !51825 (Yogi (@yo))
|
||||
- Fix broken testsuite link if the suite contains a dot. !51828 (Michael Aigner @tonka3000)
|
||||
- Move Social connect button to new GitLab UI. !51835 (Yogi (@yo))
|
||||
- Fix border bottom color collapsed replies. !51871 (Yogi (@yo))
|
||||
- Fix alignment of chevron-down icon in toggle replies. !51872 (Yogi (@yo))
|
||||
- Remove container_class in project activity which removes extra padding. !51878 (Yogi (@yo))
|
||||
- Add btn-default to MR edit button. !51879 (Yogi (@yo))
|
||||
- Remove duplicates from related_commit_sha query. !51888
|
||||
- Add btn-default class to button in project breadcrumb. !51910 (Yogi (@yo))
|
||||
- Fix top border-radius of the login box. !51950 (Yogi (@yo))
|
||||
- Improve duplication validation on Release Links. !51951
|
||||
- Update Project/Group Exporter temp folder cleanup. !51969
|
||||
- Migrate incorrect value stream group stage records. !51975
|
||||
- Fixed notes polling incorrectly overwriting suggestions in the DOM. !51988
|
||||
- Global Search - Project Filter sets Group. !52015
|
||||
- Fix Y axis units of pipeline charts when values are small. !52024
|
||||
- Apply new GitLab UI for report abuse button. !52049 (Yogi (@yo))
|
||||
- Fix gitlab:cleanup:orphan_job_artifact_files rake task limit. !52056
|
||||
- Remove extra border-top on pipeline quota in the settings page. !52059 (Yogi (@yo))
|
||||
- Disable board configuration options for users without edit permission. !52077
|
||||
- Fixed merge requests locked status not showing. !52078
|
||||
- Fix reply box border on diffs. !52084
|
||||
- Fixed sdiff suggestions not working when replying to comments. !52100
|
||||
- Allow multiple comments on diff lines in inline view. !52111
|
||||
- Breaking change: Prevent mutual recursion in GraphQL Package. !52131
|
||||
- Update hamlit to v2.14.2. !52177
|
||||
- Fix pipeline and stage show success without considering bridge status. !52192 (Cong Chen @gentcys)
|
||||
- Update GitLab Workhorse to v8.61.0. !52195
|
||||
- Scope milestones on swimlane boards to project and its ancestors. !52199
|
||||
- Fixes GraphQl merge request types commits count. !52218
|
||||
- Fix URL in JiraConnect feature flag serializer. !52221
|
||||
- Allow user SSH public key endpoint to be publicly accessible again. !52227
|
||||
- Update max number of NuGet packages returned. !52265
|
||||
- Fix bug branch change with line selected. !52285
|
||||
- Resolve User cannot merge an issue. !52311
|
||||
- Fix Net::HTTP proxy encoding username and password. !52368
|
||||
- Correct the egress 'deny all' policy preview from Allow to Deny. !52370
|
||||
- Missing action prop on group page. !52379
|
||||
- Improve search filter by taking space in file path into account. !52392
|
||||
- Remove space next to the icon in email button on admin/users page. !52451 (Yogi (@yo))
|
||||
- Fix assignee avatar alignment in edit board modal. !52453 (Yogi (@yo))
|
||||
- Remove extra margin below tab on project template page. !52454 (Yogi (@yo))
|
||||
- Fix retry option does not work in Merge Trains. !52463
|
||||
- Fix action button alignment for application inside the table in oauth/applications. !52465 (Yogi (@yo))
|
||||
- Fix viewing blobs for broken MRs. !52483
|
||||
- Fix bug in personal snippet thread discussions. !52490
|
||||
- Fix exclude path for backup rsync command. !52503
|
||||
- Make CI Icon in merge request pipeline detail consistent with other widget icons. !52516
|
||||
- Make text on Repository Cleanup page translatable. !52529
|
||||
- Fix charts sometimes being hidden on milestone page. !52552
|
||||
- Fix diff discussions rendering on the wrong side. !52579
|
||||
- Add tooltips to requirement import and export buttons. !52582 (Kev @KevSlashNull)
|
||||
- Allow dots in label names through REST API. !52591
|
||||
- Fix tooltip when drag comment selection is enabled. !52595
|
||||
- Allow Environment Scopes to Wrap on Feature Flags Table. !52617
|
||||
- Allow cross-origin requests on /oauth/token. !52641
|
||||
- Show more appropriate error message when merging fails. !52671
|
||||
- Handle IPv6 hostname in ExternalHTTP instrumenter. !52691
|
||||
- Remove MR List counts if they cannot be generated. !52698
|
||||
- API: do not mangle dots when creating project with a name. !52725
|
||||
- Fix size of group member user status emoji. !52730
|
||||
- Fix bad request error when applying suggestions. !52735
|
||||
- Update the database when moving repos between identical storages. !52743
|
||||
- Don't expose project existence by redirecting from its .git URL. !52818
|
||||
- Fill default commit message values in the placeholder instead of showing the variable slugs. !52851
|
||||
- Make LifecycleEvents exceptions to be fatal. !52881
|
||||
- BulkImports: avoid infinity recursion on group migration. !52931
|
||||
- Fix to show auditor badging in admin user view. !52943
|
||||
- Fix empty pipeline analytics charts when time_zone is non-UTC. !52971
|
||||
- Fix fullscreen mode not working for comments in merge request changes view. !53009 (Simon Stieger @sim0)
|
||||
- Fix formatting of "to do" in alert sidebar and error. !53037
|
||||
- Change to-do formatting in Design error messages and sidebar. !53040
|
||||
- Fix opensearch for anonymous users. !53056
|
||||
- Allow HEAD requests for read_api and read_user scope tokens. !53088
|
||||
- Adjust job report artifacts downloads to handle multiple types. !53141
|
||||
- Fixed discussions on merge request commits not showing. !53143
|
||||
- Send only latest jobs in pipeline webhook payload. !53159
|
||||
- Fix snippet repository storage move API when snippet does not exist. !53211
|
||||
- Use user-provided timestamp when updating issue and merge request milestones, iterations, and weights using the API. !53237
|
||||
- Switch to correct localization function that strips namespaces. !53244
|
||||
- Fix welcome page alignment on CE. !53265
|
||||
- Fixes broken password reset link in account deletion message. !53274
|
||||
- Support multi-line string variable values when running a manual pipeline in the UI. !53292
|
||||
- Support fog-aws host options for Workhorse S3 client. !53326
|
||||
- Vertically centre CI icons on pipeline page. !53427
|
||||
- gitaly: Fix access checks with transactions and quarantine environments. !53449
|
||||
- Back Button now switches to last active analytics tab. !53495
|
||||
- Conditionally render test case file. !53497
|
||||
- Remove dependency_proxy_manifests records with content_type to prevent Dependency Proxy failures. !53506
|
||||
- Ensure note is promoted to discussion within reply create transaction. !53542
|
||||
- Allow users to fork to a group when their personal namespace is full. !53632
|
||||
- Fix some image diff URLs with special characters causing the diff to not show. !53638
|
||||
- Adds only_group_labels and include_ancestor_labels and include_descendant_groups arguments to the project and group labels resolvers respectively. !53639
|
||||
- Fix misalignment of assignee dropdown checkmark. !53664
|
||||
- Fix timeouts affecting certain test webhooks. !53676
|
||||
- Fix missing known usage data event. !53729
|
||||
- Align note actions icons. !53753 (Claudius Ellsel (@clel))
|
||||
- Fix left margin of Merge button in FF merge mode. !53756
|
||||
- Fix spurious not-adjacent error when moving designs. !53771
|
||||
- Cleanup incorrect data in projects.has_external_wiki. !53790
|
||||
- Update column 'updated_at' in container after repository storage move. !53821
|
||||
- Add post migration to backfill projects updated at after repository move. !53845
|
||||
- Fix Web IDE open MR to show opened files consistently. !53927
|
||||
- Removed ugly border around ellipsis dropdown Gitlab IDE. !53963 (Shubham Kumar @imskr)
|
||||
- Fix bug rendering snippet activity. !53993
|
||||
- Handle severity for generic payloads more gracefully. !53999
|
||||
- Fix gap in tree table header. !54025
|
||||
- Move GMA user badging in admin to EE only. !54125
|
||||
- Fix alignment of 'Rebase in progress' label. !54189
|
||||
- Fix incorrect breadcrumb path for import groups page. !54211
|
||||
- Update Sample GitLab Project Template with MR conflicts fix. !54248
|
||||
- Fix search functionality in Jira issues list. !54312
|
||||
- Fix force-routing to Gitaly primary with empty hook env. !54317
|
||||
- Fix pipeline test report not rendering when missing properties. !54363
|
||||
- Safe guard repo compare when data is undefined. !54371
|
||||
- Fix unneeded left margin in discussion filter container on mobile. !54379
|
||||
- Fix overflowing design buttons on mobile. !54381
|
||||
|
||||
### Deprecated (1 change)
|
||||
|
||||
- Deprecate GitLab-managed (v1) apps that will be removed in 14.0. !54162
|
||||
|
||||
### Changed (107 changes, 16 of them are from the community)
|
||||
|
||||
- Migrate button to gitlab ui in note form. !42221
|
||||
- Escaped markdown should not be interpreted as shortcuts. !45922
|
||||
- Display the user busy status in the MR sidebar. !47769
|
||||
- Move integration inheritance override dropdown above grid layout. !49325
|
||||
- Code extraction - refactoring of MR services classes. !49827
|
||||
- Create new assignees widget for boards. !50054
|
||||
- Update the HEX values and names of the color options for labels. !50393
|
||||
- Rename asset_proxy_whitelist column on application_settings. !50824
|
||||
- Prevent creating duplicate pipelines manually. !51076 (Kev @KevSlashNull)
|
||||
- Render WebP attachments as image by default. !51088 (Kev @KevSlashNull)
|
||||
- Add warning message for GitLab group migration. !51214
|
||||
- Display Terraform list errors to user. !51397
|
||||
- Global Search - UX Cleanup of Search Bar. !51409
|
||||
- Display full design name in tooltip. !51421
|
||||
- Change the project avatar preview into a rectangle. !51511 (Austin Regnery)
|
||||
- Add 'tags' field to runners in job/pipeline webhook payloads. !51633
|
||||
- Move to CE: mutation to create MR for SAST Configuration. !51634
|
||||
- Add converted_at(timestamp) & context(jsonb) columns to the experiment_subjects table. !51659
|
||||
- Link to more helpful docs from alert management pages. !51665
|
||||
- Move Cohorts page to Overiew-Users. !51707
|
||||
- Web IDE shows alert and disable buttons when user cannot push code. !51710
|
||||
- Add entity columns to vulnerability occurrences. !51739
|
||||
- Add PostgreSQL trigger to maintain projects.has_external_issue_tracker. !51852
|
||||
- Reduce vertical padding of registry list item. !51961
|
||||
- Update Workhorse to v8.60.0. !51965
|
||||
- Track exceptions when using Bulk Import. !52011
|
||||
- Remove redundant text in Terraform Widget. !52013
|
||||
- Add "What's new" item to the help dropdown. !52020
|
||||
- Change UI text for failed pipeline on an MR. !52023
|
||||
- Remove group owner data from webhooks. !52071
|
||||
- Move btn-primary to btn-confirm class as a part of Pajamas migration. !52090 (Yogi (@yo))
|
||||
- Add name validation to Terraform state. !52102
|
||||
- Change error message for user approval error. !52103
|
||||
- Admin dashboard basic stats redesign. !52176 (Yogi (@yo))
|
||||
- Drop repository_read_only column from namespaces table. !52181
|
||||
- Update styling of validation messages in New Feature Flag form. !52217
|
||||
- Add callout disabling feature to cleanup policy alert. !52327
|
||||
- Add pagination and filtering to htoup imports. !52340
|
||||
- BulkImports: Add pipeline step to the failures log. !52345
|
||||
- Improve accessibility of gray color CI status icons. !52356
|
||||
- Global Search - UX Refresh for Sort Button. !52387
|
||||
- Add 404 state to container registry details page. !52466
|
||||
- Monitor RackAttack redis usage and enrich auth structured logs. !52471
|
||||
- Remove compare switch revision button. !52547
|
||||
- Improve merge failed error. !52555
|
||||
- Add unique index on services project_id and type. !52563
|
||||
- Clean up uniqueness validations for service type. !52565
|
||||
- Redesign the search UI for the package list. !52575
|
||||
- Fix margins in social connect button on account settings. !52581 (Yogi (@yo))
|
||||
- Move the sub-section to gl-card in advanced search settings in admin. !52585 (Yogi (@yo))
|
||||
- Update styles for terraform MR widget. !52627
|
||||
- Bypass admin mode for internal api operations (ssh git & http rails). !52697 (Diego Louzán)
|
||||
- Increase the complexity score of GraphQL detailedStatus#label as it can call Gitaly. !52708
|
||||
- Migrate toggle button in subscription to GitLab UI component. !52717
|
||||
- Migrate feature flags page toggles to GlToggle. !52728
|
||||
- Migrate project settings to use GlToggle. !52729
|
||||
- Run pipeline_schedule_worker at every 10th minute from 3 through 59. !52756 (Ben Bodenmiller (@bbodenmiller))
|
||||
- Use realtime_changes endpoint for reporting group import status. !52796
|
||||
- Add content_type column to dependency_proxy_manifests. !52805
|
||||
- Replace erase job alert background color with color consistent with UI. !52810
|
||||
- Fix protected branches/tags border. !52816
|
||||
- Update download button size to sm from xs and add btn-default. !52867 (Yogi (@yo))
|
||||
- Change DevopsAdoption feature to work with single group only. !52871
|
||||
- Refactored admin user table headers. !52891 (Shubham Kumar (@imskr))
|
||||
- Show helper link on a new line in GPG status popover. !52894 (Yogi (@yo))
|
||||
- Fix bug, where the download email patches and plain diffs links did not download from the commit page. !52899 (Yogi (@yo))
|
||||
- Update code quality template to use 0.85.22. !52913
|
||||
- Remove ci_live_trace_use_fog_attributes feature flag. !52939
|
||||
- Only Display One Chart at a Time. !52952
|
||||
- Unwrap Sidekiq exceptions and jobs in the structured logs and metrics. !53006
|
||||
- GraphQL: Add mergedYaml to CiConfigResolver response. !53081
|
||||
- Add runner instructions modal in the CI/CD settings section. !53087
|
||||
- Align action buttons in jobs page. Reduce icon buttons width in jobs, artifacts and environment pages. !53155
|
||||
- Change the badge design in the jobs page. !53168
|
||||
- Improve user dropdown items. !53175
|
||||
- Update Rugged to v1.0.1. !53212
|
||||
- Introduce automatic class path correction in Cobertura parser. !53236
|
||||
- Sort milestone dropdown items by due date. !53242
|
||||
- Change pipeline empty state language. !53281
|
||||
- Stop notifying users of acknowledged alerts and stop changing the status of acknowledged Prometheus alerts to Triggered. !53330
|
||||
- Enable suggestions custom commit message feature flag by default. !53342
|
||||
- Redesign SSH keys list. !53351 (Yogi (@yo))
|
||||
- Track YAML-less Auto DevOps inclusions separately. !53383
|
||||
- Add sort argument to container_repositories graphql resolver. !53404
|
||||
- Update Ruby detection rules for SAST. !53414
|
||||
- Add loading display to Terraform lock action. !53475
|
||||
- Search: Add Sort by Last Updated to Issue/MR. !53589
|
||||
- Replace bootstrap modal in issuable_by_email HAML template. !53599
|
||||
- Change UI text for 2FA setup. !53677
|
||||
- Align and reorder boards search bar buttons. !53690
|
||||
- Skip new note notifications when author is deleted. !53699
|
||||
- Add release tooltip for guest users. !53722 (Jonas Wälter @wwwjon)
|
||||
- Accept deeply nested arrays for CI script keyword. !53737
|
||||
- Reset CI minutes only for namespaces that used minutes. !53740
|
||||
- Update Sample GitLab Project Template to be clearer and adjust prominent placement. !53750
|
||||
- Update blob page buttons to gitlab-ui pajamas styles. !53775
|
||||
- Highlight board lists when they are added. !53779
|
||||
- Add sort to container registry list page. !53820
|
||||
- Filter deployments by finished_at in Value Stream Analytics. !53861
|
||||
- Display loading when removing Terraform state. !53897
|
||||
- Improve project members management, filtering, and sorting. !53935
|
||||
- Add updated_at output to search results. !53958
|
||||
- Prepend the Marginalia comment in SQL query. !54015
|
||||
- Add OpenID SSO icon. !54026
|
||||
- Select the newest records for webhook test payloads. !54030
|
||||
- Upgrade Asciidoctor to 2.0.12. !54121 (Guillaume Grossetie)
|
||||
- Remove position sticky polyfill. !54299
|
||||
|
||||
### Performance (14 changes)
|
||||
|
||||
- Add database index to improve performance of usage ping metrics calculation. !48671
|
||||
- Add indexes for onboarding progress table. !50679
|
||||
- Support batch loading of merge head diffs. !51078
|
||||
- Extend index on ci_builds_metadata. !52123
|
||||
- Improve the performance of merge request and issue search by label(s). !52495
|
||||
- Project creation to use specialized worker to calculate project authorizations. !52719
|
||||
- Paginate single commit view. !52819
|
||||
- Introduce a rendering limit for commit titles. !52904
|
||||
- Add index to incident management oncall shifts table. !52961
|
||||
- Lower allocations in _collapsed partial. !53233
|
||||
- Memoize the fork suggestion button partial. !53256
|
||||
- Optimized loading of descendant group labels. !53356
|
||||
- Use Gitaly keyset pagination to optimize branches page. !53409
|
||||
- Speed up update merge request worker by memoizing whether a push is a force or not. !53536
|
||||
|
||||
### Added (107 changes, 15 of them are from the community)
|
||||
|
||||
- Add tag_list attribute to the JSON output for Jobs API. !44859 (Alon Liszt)
|
||||
- Add follow each other model, API and UI(profile, activity view). !45451 (Roger Meier)
|
||||
- Add Banzai filter for CustomEmoji. !47122 (Rajendra Kadam)
|
||||
- Deployments::CreateService executions are idempotent for duplicate params. !47610
|
||||
- Populate and migrate issue_email_participants. !48711 (Lee Tickett @leetickett)
|
||||
- Enable local file reviews (marking files as viewed) by default and add documentation for that feature. !48976
|
||||
- Add finder for getting commits with a trailer set. !49243
|
||||
- Enable/disable additional diagram formats on Kroki. !49304 (Guillaume Grossetie)
|
||||
- Allow opening projects with VS Code. !49460 (Kev @KevSlashNull)
|
||||
- Allow users to re-request a review from a reviewer. !50068
|
||||
- Add job to persist On-call shifts. !50239
|
||||
- Improve visibility of time spent with external HTTP calls. !50696
|
||||
- Add rake task to migrate Terraform states to object storage. !50740
|
||||
- Map common severity values from a Prometheus alert payload. !50871
|
||||
- Add keep latest artifact option for instances. !50889
|
||||
- Add GraphQL query for single Terraform state. !51145
|
||||
- Move "number of changed files" into Web IDE sidebar badge. !51166 (Kev @KevSlashNull)
|
||||
- Allow reviewers to be updated via MergeRequest API. !51186
|
||||
- Instrument CI parsers. !51241
|
||||
- Add a commit message parameter for the suggestion endpoints. !51245
|
||||
- Add dast_profiles database table. !51296
|
||||
- Editor Lite: support for Diff Instance. !51470
|
||||
- Populate the `uuid` attributes of the `security_findings` records and the `finding_uuid` attribute of the related `vulnerability_feedback` records. !51472
|
||||
- Add the Manage::Import total GMAU metric. !51496
|
||||
- Mark files as reviewed locally. !51513
|
||||
- Sync pipeline builds to Jira. !51627
|
||||
- Send deployment information to Jira. !51629
|
||||
- Database migration for compliance pipeline configuration location. !51663
|
||||
- Debian Group and Project Distribution Components. !51732 (Mathieu Parent)
|
||||
- Add a /request_review alias for /assign_reviewer. !51751
|
||||
- Log user approval/rejection in application logs. !51768
|
||||
- Enable synchronization of feature flags to Jira. !51796
|
||||
- Create Groups::RepositoryStorageMove table. !51803
|
||||
- Keyboard shortcut for switching to GitLab next (Canary). !51834 (Yogi (@yo))
|
||||
- Add On-call Rotations destroy mutation to GraphQL. !51860
|
||||
- Add enforced SSH key expiration. !51921
|
||||
- Pass dependency proxy credentials to runners to log in automatically. !51927
|
||||
- Add captcha-related fields to snippet GraphQL mutations. !51956
|
||||
- Support setting more attributes when forking a project. !51962
|
||||
- Add delete functionality to the Image Repository detail view. !51980
|
||||
- Expose if user is a bot in the REST api. !52003
|
||||
- Add chat notification label support. !52105
|
||||
- Support Project variables in `include` section of `gitlab-ci.yml`. !52108
|
||||
- Add API for generating Markdown changelogs. !52116
|
||||
- Add Jira proxy settings columns. !52119
|
||||
- Project access token management via API. !52139
|
||||
- BulkImports: Import Group Labels. !52260
|
||||
- Add repository_read_only column to NamespaceSettings table. !52300
|
||||
- Use a custom Ruby patch to instrument memory usage. !52306
|
||||
- Added ability to re-request a review from a reviewer. !52321
|
||||
- Add rake task to reset user password. !52347
|
||||
- Track monthly active users for QuickActions. !52398
|
||||
- Add `patch_hard_limit_bytes_hit` metric for monitoring diff patch size limit hits. !52456
|
||||
- Show confirmation dialog when exiting pipeline editor. !52458
|
||||
- Search across full name for mentions autocomplete. !52488
|
||||
- Add site landmarks for screen readers. !52514
|
||||
- Add `security_and_compliance_access_level` column into the `project_features` table. !52551
|
||||
- Add OpenSearch support. !52583
|
||||
- Show recent test case failures in the pipeline test report. !52606
|
||||
- Display epic related events on user activity feed. !52611
|
||||
- Adds README to OpenAPI docs. !52637 (Jim Cser @jimcser)
|
||||
- Add rubygems metadata table. !52639
|
||||
- Add subgroup_events column to web_hooks table. !52648
|
||||
- Improve Vulnerability Tracking: Add fingerprints table. !52720
|
||||
- Add git_two_factor_session_expiry column to application_settings table. !52761
|
||||
- Add auto_delete_at to environments. !52788
|
||||
- Matomo: Support the disabling of cookies. !52831 (otheus@gmail.com)
|
||||
- Debian Group and Project Distribution Component Files. !52885 (Mathieu Parent)
|
||||
- Adds jira issue enforcement field. !52896
|
||||
- Track CI minutes for namespace on a monthly basis. !52915
|
||||
- Debian Publications. !52916 (Mathieu Parent)
|
||||
- Add bot to User GraphQL Type. !52933
|
||||
- Support setting confidential note attribute in UI. !52949 (Lee Tickett @leetickett)
|
||||
- Pipeline-level concurrency control with Cross-Project/Parent-Child pipelines. !53007
|
||||
- Enable housekeeping for project and group wiki repos. !53011
|
||||
- Add GFM reference format for feature flags. !53021
|
||||
- BulkImports: Migrate Group Membership. !53083
|
||||
- Add metrics for merge request approvals and revoking approvals. !53201
|
||||
- Add empty jobs page with link to editor. !53240
|
||||
- Add status attribute to packages and ability to set 'hidden' for generic packages. !53385
|
||||
- Display unload warning if MR edit changed. !53438
|
||||
- Track CI minutes on a monthly basis at project level. !53460
|
||||
- Migration to add new Premium and Ultimate plan records. !53465
|
||||
- Add group_id to ci_daily_build_group_report_result. !53494
|
||||
- Enable group setting to allow or prevent duplicate Maven uploads. !53591
|
||||
- Add application rate limit for Notes creation. !53637
|
||||
- Add link to test case file in pipeline test report. !53650
|
||||
- Automatically retarget merge requests. !53710
|
||||
- Add Security Orchestration Policy Configuration. !53743
|
||||
- Import epic award emojis when using Bulk Import. !53747
|
||||
- Allow deploy keys to push to a protected branch. !53812
|
||||
- Add semgrep SAST analyzer. !53815 (Daniel Paul Searles)
|
||||
- Support Markdown for Feature Flags. !53816
|
||||
- Add an allowlist to exclude users from the rate limit on notes creation. !53866
|
||||
- Add user setting for opting into marketing emails. !53921
|
||||
- Improve highlighting for merge diffs. !53980
|
||||
- Add created_by_user to cluster agents. !54011
|
||||
- Make merge-ref base the default comparison mode. !54017
|
||||
- Add created_by_user to cluster agent tokens. !54019
|
||||
- Add indicator in admin dashboard if user is group managed. !54027
|
||||
- Add state events to merge request update mutation. !54133
|
||||
- Display user busy status in issue sidebar. !54165
|
||||
- Upgrade GitLab Pages to v1.35.0. !54167
|
||||
- Add '!reference' YAML tag to help merge CI configurations. !54198
|
||||
- Schedule user status cleanup after a given time interval via the REST API. !54207
|
||||
- Add merged Yaml tab feature to Pipeline Editor. !54223
|
||||
- Added warnings field to the pipelines GraphQL type. !54296
|
||||
|
||||
### Other (170 changes, 101 of them are from the community)
|
||||
|
||||
- Apply GitLab UI button styles to buttons in app/views/projects/notes directory. !44107 (Lakshit)
|
||||
- Remove duplicates from vulnerability_occurrences. !49937
|
||||
- Edited UI copy wording to comply with GitLab style. !50676
|
||||
- New Shared Partial for SSH Key Deletion. !50825 (Mehul Sharma)
|
||||
- Update buttons in _hook.html.haml to use GitLab UI. !51065 (nuwe1)
|
||||
- Adds GitLabUI button styles in _test_button.html.haml. !51070 (nuwe1)
|
||||
- Adds GitLabUI button styles in deploy tokens _table.html.haml. !51082 (nuwe1)
|
||||
- Apply GitLab UI styles to buttons in notification directory _new_button.html.haml. !51148 (nuwe1)
|
||||
- Apply GitLab UI styles to buttons in _comment_button.html.haml. !51152 (nuwe1)
|
||||
- Adds GitLab UI styles to button in _edit_form.html.haml. !51156 (nuwe1)
|
||||
- Adds GitLab UI styles to button in _form.html.haml. !51160 (nuwe1)
|
||||
- Add gl-button to Set up new device button in 2fa settings. !51283 (Yogi (@yo))
|
||||
- Add `gl-button` to promotion buttons on issue sidebar. !51287 (Yogi (@yo))
|
||||
- Add gl-button to personal access token page. !51294 (Yogi (@yo))
|
||||
- Add gl-button to new issues and MR page. !51295 (Yogi (@yo))
|
||||
- Updated UI text to match style guidelines. !51348
|
||||
- Add gl-button to nav buttons in the project page. !51427 (Yogi (@yo))
|
||||
- Add Composer cache classes and table. !51509
|
||||
- Bump doorkeeper to 5.4.0. !51559
|
||||
- [Commit Page] Migrate to GlModal for cherry-pick commit. !51650
|
||||
- Updated UI text to match style guidelines. !51658
|
||||
- Apply GitLab UI button styles to button in geo. !51777 (Yogi (@yo))
|
||||
- Apply GitLab UI button styles to button _blank_state_ee_trial. !51778 (Yogi (@yo))
|
||||
- Apply GitLab UI button styles to buttons in group settings. !51781 (Yogi (@yo))
|
||||
- Apply GitLab UI button styles to buttons in ee/app/views/users directory. !51783 (Yogi (@yo))
|
||||
- Improve Performance bar design. !51788 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in admin settings. !51789 (Yogi (@yo))
|
||||
- Update empty labels container background color. !51792 (Yogi (@yo))
|
||||
- Update milestone badge to gl-badge. !51794 (Yogi (@yo))
|
||||
- Apply GitLab UI for create file button in MR. !51795 (Yogi (@yo))
|
||||
- Remove huge bottom margin for expand file button. !51802 (Yogi (@yo))
|
||||
- Apply new GitLab UI for commit browse file button. !51805 (Yogi (@yo))
|
||||
- Update CI general pipeline settings UI text. !51806
|
||||
- Apply new GitLab UI style to mirror update button and add space after icon. !51808 (Yogi (@yo))
|
||||
- Migrate old button classes to our Pajamas style GitLab button in multiple areas. !51826 (Yogi (@yo))
|
||||
- Update links in Pages settings. !51847
|
||||
- Update button style for consistency in Settings > Integrations, Mermaid Diagram warning, and No SSH warning. !51864
|
||||
- Add empty state placeholder for milestones. !51887 (Yogi (@yo))
|
||||
- Move user action card to new GitLab UI card in admin. !51914 (Yogi (@yo))
|
||||
- Move email badges to new GitLab UI badges. !51915 (Yogi (@yo))
|
||||
- Apply GitLab UI to email status badge. !51916 (Yogi (@yo))
|
||||
- Remove fuzzy search for awards emoji and refactor GFM autocomplete emoji support. !51972 (Ethan Reesor (@firelizzard))
|
||||
- [MR Page] Migrate to GlModal for revert MR. !52019
|
||||
- Increase splay of Puma worker restarts. !52079
|
||||
- Add btn-default class for btn-build buttons. !52093 (Yogi (@yo))
|
||||
- Update GitLab Runner Helm Chart to 0.25.0. !52095
|
||||
- Apply new GitLab UI for form inputs project settings page. !52097 (Yogi (@yo))
|
||||
- When an MR diff is Too Large, highlight it like other collapsed diffs. !52146
|
||||
- Updated UI text to match style guidelines. !52152
|
||||
- Remove temp index in oauth_applications table. !52157
|
||||
- Apply new GitLab UI for input fields in auth screens. !52167 (Yogi (@yo))
|
||||
- Update doorkeeper to 5.5.0.rc2. !52171
|
||||
- Remove Avatar from Comment Forms. !52180 (Lee Tickett @leetickett)
|
||||
- Add gl-button class in relevant places on project html. !52183 (Gary Bell @garybell)
|
||||
- Track suggestion add/apply metrics. !52189
|
||||
- Track the number of users who are assigned and get requested for reviews. !52194
|
||||
- Apply new GitLab UI for badge and button in project's protected branch settings. !52207 (Yogi (@yo))
|
||||
- Disable nakayoshi_fork by default in examples. !52209
|
||||
- Remove graphql_pipeline_header feature flag. !52247
|
||||
- Updated UI text to match style guidelines. !52267
|
||||
- Update bundler-audit gem to 0.7.0.1. !52269
|
||||
- Update default_value_for gem to 3.4.0. !52271
|
||||
- Convert deploy token button to pajamas. !52277
|
||||
- Updated UI text to match style guidelines. !52284
|
||||
- Apply new GitLab UI badge for users in the admin page. !52289 (Yogi (@yo))
|
||||
- Apply new GitLab UI for inputs in admin/users directory. !52290 (Yogi (@yo))
|
||||
- Fix Add a to do spelling on epics. !52292 (Yogi (@yo))
|
||||
- Expose user availablility data on issuable pages. !52333
|
||||
- Convert project runner buttons to pajamas. !52358
|
||||
- Replace angle-double-left icon with chevron-double-lg-left. !52393
|
||||
- Apply new GitLab UI for subscribe buttons in issues. !52401 (Yogi (@yo))
|
||||
- Apply new GitLab UI for inputs in admin/application_settings directory. !52402 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons and card in admin/license. !52408 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in admin/appearance. !52409 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in admin/applications. !52410 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in admin/broadcast_messages. !52411 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in admin/hooks. !52412 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in admin/labels. !52413 (Yogi (@yo))
|
||||
- Move vulnerability report counts to GlCard. !52416 (Yogi (@yo))
|
||||
- Bold metricDetailsLabel in the performance bar. !52417 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in user profile settings. !52424 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in user applications. !52425 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in user personal access token settings. !52426 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input field in user email settings. !52427 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in blob header. !52429 (Yogi (@yo))
|
||||
- Add btn-default to settings toggle button in push rules. !52430 (Yogi (@yo))
|
||||
- Replace OpenSSL constants with strings. !52432 (Takuya Noguchi)
|
||||
- Fix spacing before toggle subscribe button on labels. !52459 (Yogi (@yo))
|
||||
- Apply new GitLab UI for input fields in file editor. !52461 (Yogi (@yo))
|
||||
- Improve variable settings ui text. !52462
|
||||
- Update starred empty state with new GitLab UI classes. !52467 (Yogi (@yo))
|
||||
- Track API requests from the the VS Code extension. !52484
|
||||
- Create constants for bv::show::modal and bv::hide::modal. !52518 (Kev @KevSlashNull)
|
||||
- Add additional instructions on deleting account on Gitlab.com. !52538
|
||||
- Remove v-html from mr_widget_pipeline.vue. !52564 (Kev @KevSlashNull)
|
||||
- Apply new GitLab UI for buttons in 2fa and changed deprecated info to confirm. !52580 (Yogi (@yo))
|
||||
- Allow new docs badges in UI links. !52651
|
||||
- Update (?) link to sprite question icon. !52655 (Yogi (@yo))
|
||||
- Improve overall copy, remove redundant reassurance in the form, and fix empty %p rendered in the DOM of the welcome page. !52660
|
||||
- Apply new GitLab UI class for U2F try again button. !52759 (Yogi (@yo))
|
||||
- Update question mark icon while checking pipeline status. !52760 (Yogi (@yo))
|
||||
- Update table and ellipsis button in performance bar metrics modal. !52762 (Yogi (@yo))
|
||||
- Replace bootstrap event strings with constants. !52777 (Kev @KevSlashNull)
|
||||
- Apply new GitLab UI style for todo button in the issuable sidebar. !52779 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in MR resolve conflicts page. !52783 (Yogi (@yo))
|
||||
- Review UI text - deploy keys settings. !52830
|
||||
- Add btn-default class for the download button in graphs page. !52857 (Yogi (@yo))
|
||||
- Add btn-default class for unlock button in locked files page. !52858 (Yogi (@yo))
|
||||
- Add btn-default class for history button in the contributors page. !52861 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in tags page. !52862 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in the tag edit page. !52863 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons and input in the project graph page. !52864 (Yogi (@yo))
|
||||
- Add btn-default to buttons in tag action on the single tag page. !52866 (Yogi (@yo))
|
||||
- Apply new GitLab UI for badges in the project branch list. !52868 (Yogi (@yo))
|
||||
- Update rspec-* gem versions. !52873
|
||||
- Review UI text - deploy freezes. !52884
|
||||
- Apply new GitLab UI for RSS button in commits page. !52900 (Yogi (@yo))
|
||||
- Add btn-icon class for action buttons in the user profile. !52901 (Yogi (@yo))
|
||||
- Open CI/CD settings help links in new tab by default. !52948
|
||||
- Update links to redirected docs. !53004
|
||||
- Cleanup composer cache pages. !53005
|
||||
- Re-add migration to fix invalid merge request index. !53042
|
||||
- Update mermaid.js to v8.9.0. !53123
|
||||
- Move CleanupMultiprocDirService out of config.ru. !53139
|
||||
- Apply new GitLab UI for buttons in empty project snippets placeholder. !53157 (Yogi (@yo))
|
||||
- [MR Page] Migrate to GlModal for Cherry-pick MR. !53169
|
||||
- Bump cluster applications CI template to v0.40.0. !53183
|
||||
- Remove inconsistent index in backup_labels table. !53189
|
||||
- Set projects.has_external_wiki default to null if default value is present. !53216
|
||||
- Update bullet gem version to 6.1.3. !53217
|
||||
- Updated UI text to be sentence case. !53323
|
||||
- Add btn-default class for social buttons in login and signup page. !53347 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in pipeline page. !53364 (Yogi (@yo))
|
||||
- Apply new GitLab UI for search in frequent items search. !53368 (Yogi (@yo))
|
||||
- Apply new GitLab UI for badge in job page sidebar. !53386 (Yogi (@yo))
|
||||
- Geo - Update Patroni replication docs to automatic recover from a leader change on the primary site. !53424
|
||||
- Change secondary text color on Gitpod editor dropdown button. !53437
|
||||
- Apply new GitLab UI for new trial page. !53447 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in create project page. !53454 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in connect repo buttons in new project page. !53455
|
||||
- Apply new GitLab UI for buttons in new group page. !53456 (Yogi (@yo))
|
||||
- Show bottom tooltip for edit button in user profile. !53459 (Yogi (@yo))
|
||||
- Add Space before loading icon in toggle todo button. !53463 (Yogi (@yo))
|
||||
- Apply new GitLab UI for create mr button from issue. !53467 (Yogi (@yo))
|
||||
- Apply GitLab UI button styles to buttons in gitlab_slack_application file. !53478 (Yogi (@yo))
|
||||
- Remove namespace_onboarding_actions table. !53488
|
||||
- Update grape gem to 1.5.2. !53547
|
||||
- Apply new GitLab UI for buttons in empty issue placeholder. !53554 (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in commit page. !53555 (Yogi (@yo))
|
||||
- Apply new GitLab UI for toggle buttons in CI/CD settings page. !53556 (Yogi (@yo))
|
||||
- Add margin and remove padding in project graph page. !53557 (Yogi (@yo))
|
||||
- Add btn-icon class for icon only buttons in issues header. !53562 (Yogi (@yo))
|
||||
- Remove gl-text-black-normal from detailed metric which is not visible in dark mode. !53563 (Yogi (@yo))
|
||||
- Improve error message reporting in snippet create or update. !53576
|
||||
- Add URL help text and edit other UI text. !53578
|
||||
- Apply new GitLab UI for no repo action buttons. !53580 (Yogi (@yo))
|
||||
- Track 5 mins production app template usage. !53618
|
||||
- Add clear_status_at column to user_status table. !53620
|
||||
- Fix /-/readiness probe for Puma Single. !53708
|
||||
- Prevent blocked user from triggering notifications. !53788
|
||||
- Track when a merge request is created from an issue. !53808
|
||||
- Allow running Puma in Single mode. !53830
|
||||
- Update GitLab Workhorse to v8.62.0. !53864
|
||||
- Remove caching_experiments feature flag. !53901
|
||||
- Improve profile status emoji alignment. !54078
|
||||
- Add tracking to measure the number of unique users committing CI config. !54192
|
||||
- Enable sorting diffs by default. !54210
|
||||
- Update GitLab Workhorse to v8.63.0. !54315
|
||||
- Add btn-default to buttons in todos page. (Yogi (@yo))
|
||||
- Apply new GitLab UI for buttons in pipeline schedules.
|
||||
|
||||
|
||||
## 13.8.4 (2021-02-11)
|
||||
|
||||
### Security (9 changes)
|
||||
|
@ -414,6 +1010,40 @@ entry.
|
|||
- Add verbiage + link sast to show it's in core. !51935
|
||||
|
||||
|
||||
## 13.7.7 (2021-02-11)
|
||||
|
||||
### Security (9 changes)
|
||||
|
||||
- Cancel running and pending jobs when a project is deleted. !1220
|
||||
- Prevent Denial of Service Attack on gitlab-shell.
|
||||
- Prevent exposure of confidential issue titles in file browser.
|
||||
- Updates authorization for linting API.
|
||||
- Check user access on API merge request read actions.
|
||||
- Limit daily invitations to groups and projects.
|
||||
- Enforce the analytics enabled project setting for project-level analytics features.
|
||||
- Perform SSL verification for FortiTokenCloud Integration.
|
||||
- Prevent Server-side Request Forgery for Prometheus when secured by Google IAP.
|
||||
|
||||
|
||||
## 13.7.6 (2021-02-01)
|
||||
|
||||
### Security (5 changes)
|
||||
|
||||
- Filter sensitive GraphQL variables from logs.
|
||||
- Avoid exposing release links when the user cannot read git-tag/repository.
|
||||
- Sanitize target branch on MR page.
|
||||
- Fix DNS rebinding protection bypass when allowing an IP address in Outbound Requests setting.
|
||||
- Add routes for unmatched url for not-get requests.
|
||||
|
||||
|
||||
## 13.7.5 (2021-01-25)
|
||||
|
||||
### Fixed (2 changes, 1 of them is from the community)
|
||||
|
||||
- New project guidelines are no longer displayed. !50736 (Roger Meier)
|
||||
- Fix LFS not working with S3 specific-storage settings. !52296
|
||||
|
||||
|
||||
## 13.7.4 (2021-01-13)
|
||||
|
||||
### Security (1 change)
|
||||
|
@ -916,6 +1546,30 @@ entry.
|
|||
- Update GitLab Workhorse to v8.57.0.
|
||||
|
||||
|
||||
## 13.6.7 (2021-02-11)
|
||||
|
||||
### Security (7 changes)
|
||||
|
||||
- Cancel running and pending jobs when a project is deleted. !1220
|
||||
- Updates authorization for linting API.
|
||||
- Prevent exposure of confidential issue titles in file browser.
|
||||
- Check user access on API merge request read actions.
|
||||
- Prevent Denial of Service Attack on gitlab-shell.
|
||||
- Limit daily invitations to groups and projects.
|
||||
- Prevent Server-side Request Forgery for Prometheus when secured by Google IAP.
|
||||
|
||||
|
||||
## 13.6.6 (2021-02-01)
|
||||
|
||||
### Security (5 changes)
|
||||
|
||||
- Filter sensitive GraphQL variables from logs.
|
||||
- Avoid exposing release links when the user cannot read git-tag/repository.
|
||||
- Sanitize target branch on MR page.
|
||||
- Fix DNS rebinding protection bypass when allowing an IP address in Outbound Requests setting.
|
||||
- Add routes for unmatched url for not-get requests.
|
||||
|
||||
|
||||
## 13.6.5 (2021-01-13)
|
||||
|
||||
### Security (1 change)
|
||||
|
|
|
@ -5,11 +5,11 @@ By submitting code as an individual you agree to the
|
|||
By submitting code as an entity you agree to the
|
||||
[corporate contributor license agreement](doc/legal/corporate_contributor_license_agreement.md).
|
||||
|
||||
All Documentation content that resides under the [doc/ directory](/doc) of this
|
||||
All Documentation content that resides under the [`doc/` directory](/doc) of this
|
||||
repository is licensed under Creative Commons:
|
||||
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||
|
||||
_This notice should stay as the first item in the CONTRIBUTING.md file._
|
||||
_This notice should stay as the first item in the `CONTRIBUTING.md` file._
|
||||
|
||||
## Contributing Documentation has been moved
|
||||
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require_relative 'lib/gitlab_danger'
|
||||
require_relative 'lib/gitlab/danger/request_helper'
|
||||
require_relative 'tooling/gitlab_danger'
|
||||
require_relative 'tooling/danger/request_helper'
|
||||
|
||||
danger.import_plugin('danger/plugins/helper.rb')
|
||||
danger.import_plugin('danger/plugins/roulette.rb')
|
||||
danger.import_plugin('danger/plugins/changelog.rb')
|
||||
danger.import_plugin('danger/plugins/sidekiq_queues.rb')
|
||||
Dir["danger/plugins/*.rb"].sort.each { |f| danger.import_plugin(f) }
|
||||
|
||||
return if helper.release_automation?
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
13.8.5
|
||||
13.9.3
|
|
@ -1 +1 @@
|
|||
2.8.0
|
||||
2.9.0
|
||||
|
|
|
@ -1 +1 @@
|
|||
13.8.0
|
||||
13.9.1
|
||||
|
|
|
@ -1 +1 @@
|
|||
1.34.0
|
||||
1.35.0
|
||||
|
|
|
@ -1 +1 @@
|
|||
13.15.1
|
||||
13.17.0
|
||||
|
|
|
@ -1 +1 @@
|
|||
8.59.2
|
||||
8.63.2
|
||||
|
|
36
Gemfile
|
@ -1,3 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'rails', '~> 6.0.3.1'
|
||||
|
@ -10,12 +12,12 @@ gem 'responders', '~> 3.0'
|
|||
gem 'sprockets', '~> 3.7.0'
|
||||
|
||||
# Default values for AR models
|
||||
gem 'default_value_for', '~> 3.3.0'
|
||||
gem 'default_value_for', '~> 3.4.0'
|
||||
|
||||
# Supported DBs
|
||||
gem 'pg', '~> 1.1'
|
||||
|
||||
gem 'rugged', '~> 0.28'
|
||||
gem 'rugged', '~> 1.0.1'
|
||||
gem 'grape-path-helpers', '~> 1.6.1'
|
||||
|
||||
gem 'faraday', '~> 1.0'
|
||||
|
@ -25,8 +27,8 @@ gem 'marginalia', '~> 1.10.0'
|
|||
gem 'devise', '~> 4.7.2'
|
||||
# TODO: verify ARM compile issue on 3.1.13+ version (see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18828)
|
||||
gem 'bcrypt', '3.1.12'
|
||||
gem 'doorkeeper', '~> 5.3.0'
|
||||
gem 'doorkeeper-openid_connect', '~> 1.7.4'
|
||||
gem 'doorkeeper', '~> 5.5.0.rc2'
|
||||
gem 'doorkeeper-openid_connect', '~> 1.7.5'
|
||||
gem 'omniauth', '~> 1.8'
|
||||
gem 'omniauth-auth0', '~> 2.0.0'
|
||||
gem 'omniauth-azure-oauth2', '~> 0.0.9'
|
||||
|
@ -81,7 +83,7 @@ gem 'gitlab_omniauth-ldap', '~> 2.1.1', require: 'omniauth-ldap'
|
|||
gem 'net-ldap', '~> 0.16.3'
|
||||
|
||||
# API
|
||||
gem 'grape', '~> 1.5.1'
|
||||
gem 'grape', '~> 1.5.2'
|
||||
gem 'grape-entity', '~> 0.7.1'
|
||||
gem 'rack-cors', '~> 1.0.6', require: 'rack/cors'
|
||||
|
||||
|
@ -103,7 +105,7 @@ gem 'hashie-forbidden_attributes'
|
|||
gem 'kaminari', '~> 1.0'
|
||||
|
||||
# HAML
|
||||
gem 'hamlit', '~> 2.11.0'
|
||||
gem 'hamlit', '~> 2.14.4'
|
||||
|
||||
# Files attachments
|
||||
gem 'carrierwave', '~> 1.3'
|
||||
|
@ -154,7 +156,7 @@ gem 'wikicloth', '0.8.1'
|
|||
gem 'asciidoctor', '~> 2.0.10'
|
||||
gem 'asciidoctor-include-ext', '~> 0.3.1', require: false
|
||||
gem 'asciidoctor-plantuml', '~> 0.0.12'
|
||||
gem 'asciidoctor-kroki', '~> 0.2.2', require: false
|
||||
gem 'asciidoctor-kroki', '~> 0.4.0', require: false
|
||||
gem 'rouge', '~> 3.26.0'
|
||||
gem 'truncato', '~> 0.7.11'
|
||||
gem 'bootstrap_form', '~> 4.2.0'
|
||||
|
@ -266,7 +268,7 @@ gem 'babosa', '~> 1.0.2'
|
|||
gem 'loofah', '~> 2.2'
|
||||
|
||||
# Working with license
|
||||
gem 'licensee', '~> 8.9'
|
||||
gem 'licensee', '~> 9.14.1'
|
||||
|
||||
# Detect and convert string character encoding
|
||||
gem 'charlock_holmes', '~> 0.7.7'
|
||||
|
@ -284,6 +286,7 @@ gem 'gitlab_chronic_duration', '~> 0.10.6.2'
|
|||
gem 'rack-proxy', '~> 0.6.0'
|
||||
|
||||
gem 'sassc-rails', '~> 2.1.0'
|
||||
gem 'autoprefixer-rails', '10.2.0.0'
|
||||
gem 'terser', '1.0.2'
|
||||
|
||||
gem 'addressable', '~> 2.7'
|
||||
|
@ -292,7 +295,7 @@ gem 'gon', '~> 6.2'
|
|||
gem 'request_store', '~> 1.5'
|
||||
gem 'base32', '~> 0.3.0'
|
||||
|
||||
gem "gitlab-license", "~> 1.0"
|
||||
gem "gitlab-license", "~> 1.3"
|
||||
|
||||
# Protect against bruteforcing
|
||||
gem 'rack-attack', '~> 6.3.0'
|
||||
|
@ -339,6 +342,7 @@ end
|
|||
group :development do
|
||||
gem 'brakeman', '~> 4.2', require: false
|
||||
gem 'danger', '~> 8.0.6', require: false
|
||||
gem 'lefthook', '~> 0.7', require: false
|
||||
|
||||
gem 'letter_opener_web', '~> 1.3.4'
|
||||
|
||||
|
@ -346,12 +350,12 @@ group :development do
|
|||
gem 'better_errors', '~> 2.7.1'
|
||||
|
||||
# thin instead webrick
|
||||
gem 'thin', '~> 1.7.0'
|
||||
gem 'thin', '~> 1.8.0'
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
gem 'deprecation_toolkit', '~> 1.5.1', require: false
|
||||
gem 'bullet', '~> 6.1.0'
|
||||
gem 'bullet', '~> 6.1.3'
|
||||
gem 'gitlab-pry-byebug', platform: :mri, require: ['pry-byebug', 'pry-byebug/pry_remote_ext']
|
||||
gem 'pry-rails', '~> 0.3.9'
|
||||
gem 'pry-remote'
|
||||
|
@ -360,7 +364,7 @@ group :development, :test do
|
|||
|
||||
gem 'database_cleaner', '~> 1.7.0'
|
||||
gem 'factory_bot_rails', '~> 6.1.0'
|
||||
gem 'rspec-rails', '~> 4.0.1'
|
||||
gem 'rspec-rails', '~> 4.0.2'
|
||||
|
||||
# Prevent occasions where minitest is not bundled in packaged versions of ruby (see #3826)
|
||||
gem 'minitest', '~> 5.11.0'
|
||||
|
@ -375,7 +379,7 @@ group :development, :test do
|
|||
|
||||
gem 'scss_lint', '~> 0.59.0', require: false
|
||||
gem 'haml_lint', '~> 0.36.0', require: false
|
||||
gem 'bundler-audit', '~> 0.6.1', require: false
|
||||
gem 'bundler-audit', '~> 0.7.0.1', require: false
|
||||
|
||||
gem 'benchmark-ips', '~> 2.3.0', require: false
|
||||
|
||||
|
@ -465,7 +469,7 @@ group :ed25519 do
|
|||
end
|
||||
|
||||
# Gitaly GRPC protocol definitions
|
||||
gem 'gitaly', '~> 13.8.0.pre.rc2'
|
||||
gem 'gitaly', '~> 13.9.0.pre.rc1'
|
||||
|
||||
gem 'grpc', '~> 1.30.2'
|
||||
|
||||
|
@ -478,7 +482,7 @@ gem 'flipper', '~> 0.17.1'
|
|||
gem 'flipper-active_record', '~> 0.17.1'
|
||||
gem 'flipper-active_support_cache_store', '~> 0.17.1'
|
||||
gem 'unleash', '~> 0.1.5'
|
||||
gem 'gitlab-experiment', '~> 0.4.5'
|
||||
gem 'gitlab-experiment', '~> 0.4.9'
|
||||
|
||||
# Structured logging
|
||||
gem 'lograge', '~> 0.5'
|
||||
|
@ -520,3 +524,5 @@ gem 'webauthn', '~> 2.3'
|
|||
|
||||
# IPAddress utilities
|
||||
gem 'ipaddress', '~> 0.8.3'
|
||||
|
||||
gem 'parslet', '~> 1.8'
|
||||
|
|
103
Gemfile.lock
|
@ -81,10 +81,10 @@ GEM
|
|||
faraday_middleware (~> 1.0)
|
||||
faraday_middleware-multi_json (~> 0.0)
|
||||
oauth2 (~> 1.4)
|
||||
asciidoctor (2.0.10)
|
||||
asciidoctor (2.0.12)
|
||||
asciidoctor-include-ext (0.3.1)
|
||||
asciidoctor (>= 1.5.6, < 3.0.0)
|
||||
asciidoctor-kroki (0.2.2)
|
||||
asciidoctor-kroki (0.4.0)
|
||||
asciidoctor (~> 2.0)
|
||||
asciidoctor-plantuml (0.0.12)
|
||||
asciidoctor (>= 1.5.6, < 3.0.0)
|
||||
|
@ -94,6 +94,8 @@ GEM
|
|||
attr_encrypted (3.1.0)
|
||||
encryptor (~> 3.0.0)
|
||||
attr_required (1.0.1)
|
||||
autoprefixer-rails (10.2.0.0)
|
||||
execjs
|
||||
awesome_print (1.8.0)
|
||||
awrence (1.1.1)
|
||||
aws-eventstream (1.1.0)
|
||||
|
@ -145,12 +147,12 @@ GEM
|
|||
brakeman (4.2.1)
|
||||
browser (4.2.0)
|
||||
builder (3.2.4)
|
||||
bullet (6.1.0)
|
||||
bullet (6.1.3)
|
||||
activesupport (>= 3.0.0)
|
||||
uniform_notifier (~> 1.11)
|
||||
bundler-audit (0.6.1)
|
||||
bundler-audit (0.7.0.1)
|
||||
bundler (>= 1.2.0, < 3)
|
||||
thor (~> 0.18)
|
||||
thor (>= 0.18, < 2)
|
||||
byebug (11.1.3)
|
||||
capybara (3.34.0)
|
||||
addressable
|
||||
|
@ -205,7 +207,7 @@ GEM
|
|||
git
|
||||
css_parser (1.7.0)
|
||||
addressable
|
||||
daemons (1.2.6)
|
||||
daemons (1.3.1)
|
||||
danger (8.0.6)
|
||||
claide (~> 1.0)
|
||||
claide-plugins (>= 0.9.2)
|
||||
|
@ -225,8 +227,8 @@ GEM
|
|||
html-pipeline
|
||||
declarative (0.0.20)
|
||||
declarative-option (0.1.0)
|
||||
default_value_for (3.3.0)
|
||||
activerecord (>= 3.2.0, < 6.1)
|
||||
default_value_for (3.4.0)
|
||||
activerecord (>= 3.2.0, < 7.0)
|
||||
deprecation_toolkit (1.5.1)
|
||||
activesupport (>= 4.2)
|
||||
derailed_benchmarks (1.8.1)
|
||||
|
@ -260,11 +262,12 @@ GEM
|
|||
docile (1.3.2)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
doorkeeper (5.3.3)
|
||||
doorkeeper (5.5.0.rc2)
|
||||
railties (>= 5)
|
||||
doorkeeper-openid_connect (1.7.4)
|
||||
doorkeeper-openid_connect (1.7.5)
|
||||
doorkeeper (>= 5.2, < 5.5)
|
||||
json-jwt (>= 1.11.0)
|
||||
dotenv (2.7.6)
|
||||
dry-configurable (0.12.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
dry-core (~> 0.5, >= 0.5.0)
|
||||
|
@ -417,12 +420,12 @@ GEM
|
|||
rails (>= 3.2.0)
|
||||
git (1.7.0)
|
||||
rchardet (~> 1.8)
|
||||
gitaly (13.8.0.pre.rc2)
|
||||
gitaly (13.9.0.pre.rc1)
|
||||
grpc (~> 1.0)
|
||||
github-markup (1.7.0)
|
||||
gitlab-chronic (0.10.5)
|
||||
numerizer (~> 0.2)
|
||||
gitlab-experiment (0.4.5)
|
||||
gitlab-experiment (0.4.9)
|
||||
activesupport (>= 3.0)
|
||||
scientist (~> 1.5, >= 1.5.0)
|
||||
gitlab-fog-azure-rm (1.0.0)
|
||||
|
@ -440,7 +443,7 @@ GEM
|
|||
jaeger-client (~> 1.1)
|
||||
opentracing (~> 0.4)
|
||||
redis (> 3.0.0, < 5.0.0)
|
||||
gitlab-license (1.0.0)
|
||||
gitlab-license (1.3.0)
|
||||
gitlab-mail_room (0.0.8)
|
||||
gitlab-markup (1.7.1)
|
||||
gitlab-net-dns (0.9.1)
|
||||
|
@ -492,7 +495,7 @@ GEM
|
|||
signet (~> 0.14)
|
||||
gpgme (2.0.20)
|
||||
mini_portile2 (~> 2.3)
|
||||
grape (1.5.1)
|
||||
grape (1.5.2)
|
||||
activesupport
|
||||
builder
|
||||
dry-types (>= 1.1)
|
||||
|
@ -557,7 +560,7 @@ GEM
|
|||
rainbow
|
||||
rubocop (>= 0.50.0)
|
||||
sysexits (~> 1.1)
|
||||
hamlit (2.11.0)
|
||||
hamlit (2.14.4)
|
||||
temple (>= 0.8.2)
|
||||
thor
|
||||
tilt
|
||||
|
@ -658,6 +661,7 @@ GEM
|
|||
rest-client (~> 2.0)
|
||||
launchy (2.4.3)
|
||||
addressable (~> 2.3)
|
||||
lefthook (0.7.2)
|
||||
letter_opener (1.7.0)
|
||||
launchy (~> 2.2)
|
||||
letter_opener_web (1.3.4)
|
||||
|
@ -671,8 +675,12 @@ GEM
|
|||
toml (= 0.2.0)
|
||||
with_env (= 1.1.0)
|
||||
xml-simple
|
||||
licensee (8.9.2)
|
||||
rugged (~> 0.24)
|
||||
licensee (9.14.1)
|
||||
dotenv (~> 2.0)
|
||||
octokit (~> 4.17)
|
||||
reverse_markdown (~> 1.0)
|
||||
rugged (>= 0.24, < 2.0)
|
||||
thor (>= 0.19, < 2.0)
|
||||
listen (3.2.1)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
|
@ -753,7 +761,7 @@ GEM
|
|||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (>= 1.2, < 3)
|
||||
octokit (4.15.0)
|
||||
octokit (4.20.0)
|
||||
faraday (>= 0.9)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
oj (3.10.6)
|
||||
|
@ -987,6 +995,8 @@ GEM
|
|||
mime-types (>= 1.16, < 4.0)
|
||||
netrc (~> 0.8)
|
||||
retriable (3.1.2)
|
||||
reverse_markdown (1.4.0)
|
||||
nokogiri
|
||||
rexml (3.2.4)
|
||||
rinku (2.0.0)
|
||||
rotp (2.1.2)
|
||||
|
@ -999,12 +1009,12 @@ GEM
|
|||
rspec-core (~> 3.10.0)
|
||||
rspec-expectations (~> 3.10.0)
|
||||
rspec-mocks (~> 3.10.0)
|
||||
rspec-core (3.10.0)
|
||||
rspec-core (3.10.1)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-expectations (3.10.0)
|
||||
rspec-expectations (3.10.1)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-mocks (3.10.0)
|
||||
rspec-mocks (3.10.2)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-parameterized (0.4.2)
|
||||
|
@ -1013,17 +1023,17 @@ GEM
|
|||
proc_to_ast
|
||||
rspec (>= 2.13, < 4)
|
||||
unparser
|
||||
rspec-rails (4.0.1)
|
||||
rspec-rails (4.0.2)
|
||||
actionpack (>= 4.2)
|
||||
activesupport (>= 4.2)
|
||||
railties (>= 4.2)
|
||||
rspec-core (~> 3.9)
|
||||
rspec-expectations (~> 3.9)
|
||||
rspec-mocks (~> 3.9)
|
||||
rspec-support (~> 3.9)
|
||||
rspec-core (~> 3.10)
|
||||
rspec-expectations (~> 3.10)
|
||||
rspec-mocks (~> 3.10)
|
||||
rspec-support (~> 3.10)
|
||||
rspec-retry (0.6.1)
|
||||
rspec-core (> 3.3)
|
||||
rspec-support (3.10.0)
|
||||
rspec-support (3.10.2)
|
||||
rspec_junit_formatter (0.4.1)
|
||||
rspec-core (>= 2, < 4, != 2.12.0)
|
||||
rspec_profiling (0.0.6)
|
||||
|
@ -1069,7 +1079,7 @@ GEM
|
|||
rubyntlm (0.6.2)
|
||||
rubypants (0.2.0)
|
||||
rubyzip (2.0.0)
|
||||
rugged (0.28.4.1)
|
||||
rugged (1.0.1)
|
||||
safe_yaml (1.0.4)
|
||||
safety_net_attestation (0.4.0)
|
||||
jwt (~> 2.0)
|
||||
|
@ -1170,11 +1180,11 @@ GEM
|
|||
execjs (>= 0.3.0, < 3)
|
||||
test-prof (0.12.0)
|
||||
text (1.3.1)
|
||||
thin (1.7.2)
|
||||
thin (1.8.0)
|
||||
daemons (~> 1.0, >= 1.0.9)
|
||||
eventmachine (~> 1.0, >= 1.0.4)
|
||||
rack (>= 1, < 3)
|
||||
thor (0.20.3)
|
||||
thor (1.1.0)
|
||||
thread_safe (0.3.6)
|
||||
thrift (0.14.0)
|
||||
tilt (2.0.10)
|
||||
|
@ -1281,10 +1291,11 @@ DEPENDENCIES
|
|||
asana (~> 0.10.3)
|
||||
asciidoctor (~> 2.0.10)
|
||||
asciidoctor-include-ext (~> 0.3.1)
|
||||
asciidoctor-kroki (~> 0.2.2)
|
||||
asciidoctor-kroki (~> 0.4.0)
|
||||
asciidoctor-plantuml (~> 0.0.12)
|
||||
atlassian-jwt (~> 0.2.0)
|
||||
attr_encrypted (~> 3.1.0)
|
||||
autoprefixer-rails (= 10.2.0.0)
|
||||
awesome_print
|
||||
aws-sdk-cloudformation (~> 1)
|
||||
aws-sdk-core (~> 3)
|
||||
|
@ -1301,8 +1312,8 @@ DEPENDENCIES
|
|||
bootstrap_form (~> 4.2.0)
|
||||
brakeman (~> 4.2)
|
||||
browser (~> 4.2)
|
||||
bullet (~> 6.1.0)
|
||||
bundler-audit (~> 0.6.1)
|
||||
bullet (~> 6.1.3)
|
||||
bundler-audit (~> 0.7.0.1)
|
||||
capybara (~> 3.34.0)
|
||||
capybara-screenshot (~> 1.0.22)
|
||||
carrierwave (~> 1.3)
|
||||
|
@ -1316,7 +1327,7 @@ DEPENDENCIES
|
|||
danger (~> 8.0.6)
|
||||
database_cleaner (~> 1.7.0)
|
||||
deckar01-task_list (= 2.3.1)
|
||||
default_value_for (~> 3.3.0)
|
||||
default_value_for (~> 3.4.0)
|
||||
deprecation_toolkit (~> 1.5.1)
|
||||
derailed_benchmarks
|
||||
device_detector
|
||||
|
@ -1325,8 +1336,8 @@ DEPENDENCIES
|
|||
diff_match_patch (~> 0.1.0)
|
||||
diffy (~> 3.3)
|
||||
discordrb-webhooks-blackst0ne (~> 3.3)
|
||||
doorkeeper (~> 5.3.0)
|
||||
doorkeeper-openid_connect (~> 1.7.4)
|
||||
doorkeeper (~> 5.5.0.rc2)
|
||||
doorkeeper-openid_connect (~> 1.7.5)
|
||||
ed25519 (~> 1.2)
|
||||
elasticsearch-api (~> 6.8.2)
|
||||
elasticsearch-model (~> 6.1)
|
||||
|
@ -1357,13 +1368,13 @@ DEPENDENCIES
|
|||
gettext (~> 3.3)
|
||||
gettext_i18n_rails (~> 1.8.0)
|
||||
gettext_i18n_rails_js (~> 1.3)
|
||||
gitaly (~> 13.8.0.pre.rc2)
|
||||
gitaly (~> 13.9.0.pre.rc1)
|
||||
github-markup (~> 1.7.0)
|
||||
gitlab-chronic (~> 0.10.5)
|
||||
gitlab-experiment (~> 0.4.5)
|
||||
gitlab-experiment (~> 0.4.9)
|
||||
gitlab-fog-azure-rm (~> 1.0)
|
||||
gitlab-labkit (= 0.14.0)
|
||||
gitlab-license (~> 1.0)
|
||||
gitlab-license (~> 1.3)
|
||||
gitlab-mail_room (~> 0.0.8)
|
||||
gitlab-markup (~> 1.7.1)
|
||||
gitlab-net-dns (~> 0.9.1)
|
||||
|
@ -1376,7 +1387,7 @@ DEPENDENCIES
|
|||
google-api-client (~> 0.33)
|
||||
google-protobuf (~> 3.12)
|
||||
gpgme (~> 2.0.19)
|
||||
grape (~> 1.5.1)
|
||||
grape (~> 1.5.2)
|
||||
grape-entity (~> 0.7.1)
|
||||
grape-path-helpers (~> 1.6.1)
|
||||
grape_logging (~> 1.7)
|
||||
|
@ -1388,7 +1399,7 @@ DEPENDENCIES
|
|||
gssapi
|
||||
guard-rspec
|
||||
haml_lint (~> 0.36.0)
|
||||
hamlit (~> 2.11.0)
|
||||
hamlit (~> 2.14.4)
|
||||
hangouts-chat (~> 0.0.5)
|
||||
hashie
|
||||
hashie-forbidden_attributes
|
||||
|
@ -1410,9 +1421,10 @@ DEPENDENCIES
|
|||
knapsack (~> 1.17)
|
||||
kramdown (~> 2.3.0)
|
||||
kubeclient (~> 4.9.1)
|
||||
lefthook (~> 0.7)
|
||||
letter_opener_web (~> 1.3.4)
|
||||
license_finder (~> 6.0)
|
||||
licensee (~> 8.9)
|
||||
licensee (~> 9.14.1)
|
||||
lockbox (~> 0.3.3)
|
||||
lograge (~> 0.5)
|
||||
loofah (~> 2.2)
|
||||
|
@ -1452,6 +1464,7 @@ DEPENDENCIES
|
|||
omniauth_openid_connect (~> 0.3.5)
|
||||
org-ruby (~> 0.9.12)
|
||||
parallel (~> 1.19)
|
||||
parslet (~> 1.8)
|
||||
peek (~> 1.1)
|
||||
pg (~> 1.1)
|
||||
pg_query (~> 1.3.0)
|
||||
|
@ -1487,7 +1500,7 @@ DEPENDENCIES
|
|||
rouge (~> 3.26.0)
|
||||
rqrcode-rails3 (~> 0.1.7)
|
||||
rspec-parameterized
|
||||
rspec-rails (~> 4.0.1)
|
||||
rspec-rails (~> 4.0.2)
|
||||
rspec-retry (~> 0.6.1)
|
||||
rspec_junit_formatter
|
||||
rspec_profiling (~> 0.0.6)
|
||||
|
@ -1496,7 +1509,7 @@ DEPENDENCIES
|
|||
ruby-progressbar (~> 1.10)
|
||||
ruby_parser (~> 3.15)
|
||||
rubyzip (~> 2.0.0)
|
||||
rugged (~> 0.28)
|
||||
rugged (~> 1.0.1)
|
||||
sanitize (~> 5.2.1)
|
||||
sassc-rails (~> 2.1.0)
|
||||
scss_lint (~> 0.59.0)
|
||||
|
@ -1521,7 +1534,7 @@ DEPENDENCIES
|
|||
sys-filesystem (~> 1.1.6)
|
||||
terser (= 1.0.2)
|
||||
test-prof (~> 0.12.0)
|
||||
thin (~> 1.7.0)
|
||||
thin (~> 1.8.0)
|
||||
thrift (>= 0.14.0)
|
||||
timecop (~> 0.9.1)
|
||||
toml-rb (~> 1.0.0)
|
||||
|
|
2
Rakefile
|
@ -1,4 +1,6 @@
|
|||
#!/usr/bin/env rake
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
||||
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
||||
|
||||
|
|
2
VERSION
|
@ -1 +1 @@
|
|||
13.8.5
|
||||
13.9.3
|
BIN
app/assets/images/auth_buttons/openid_64.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
app/assets/images/mailers/in_product_marketing/create-0.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
app/assets/images/mailers/in_product_marketing/create-1.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
app/assets/images/mailers/in_product_marketing/create-2.png
Normal file
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 41 KiB |
BIN
app/assets/images/mailers/in_product_marketing/team-0.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
app/assets/images/mailers/in_product_marketing/team-1.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
app/assets/images/mailers/in_product_marketing/team-2.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
app/assets/images/mailers/in_product_marketing/trial-0.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
app/assets/images/mailers/in_product_marketing/trial-1.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
app/assets/images/mailers/in_product_marketing/trial-2.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
app/assets/images/mailers/in_product_marketing/verify-0.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
app/assets/images/mailers/in_product_marketing/verify-1.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
app/assets/images/mailers/in_product_marketing/verify-2.png
Normal file
After Width: | Height: | Size: 56 KiB |
142
app/assets/javascripts/actioncable_connection_monitor.js
Normal file
|
@ -0,0 +1,142 @@
|
|||
/* eslint-disable no-restricted-globals */
|
||||
|
||||
import { logger } from '@rails/actioncable';
|
||||
|
||||
// This is based on https://github.com/rails/rails/blob/5a477890c809d4a17dc0dede43c6b8cef81d8175/actioncable/app/javascript/action_cable/connection_monitor.js
|
||||
// so that we can take advantage of the improved reconnection logic. We can remove this once we upgrade @rails/actioncable to a version that includes this.
|
||||
|
||||
// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting
|
||||
// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.
|
||||
|
||||
const now = () => new Date().getTime();
|
||||
|
||||
const secondsSince = (time) => (now() - time) / 1000;
|
||||
class ConnectionMonitor {
|
||||
constructor(connection) {
|
||||
this.visibilityDidChange = this.visibilityDidChange.bind(this);
|
||||
this.connection = connection;
|
||||
this.reconnectAttempts = 0;
|
||||
}
|
||||
|
||||
start() {
|
||||
if (!this.isRunning()) {
|
||||
this.startedAt = now();
|
||||
delete this.stoppedAt;
|
||||
this.startPolling();
|
||||
addEventListener('visibilitychange', this.visibilityDidChange);
|
||||
logger.log(
|
||||
`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
stop() {
|
||||
if (this.isRunning()) {
|
||||
this.stoppedAt = now();
|
||||
this.stopPolling();
|
||||
removeEventListener('visibilitychange', this.visibilityDidChange);
|
||||
logger.log('ConnectionMonitor stopped');
|
||||
}
|
||||
}
|
||||
|
||||
isRunning() {
|
||||
return this.startedAt && !this.stoppedAt;
|
||||
}
|
||||
|
||||
recordPing() {
|
||||
this.pingedAt = now();
|
||||
}
|
||||
|
||||
recordConnect() {
|
||||
this.reconnectAttempts = 0;
|
||||
this.recordPing();
|
||||
delete this.disconnectedAt;
|
||||
logger.log('ConnectionMonitor recorded connect');
|
||||
}
|
||||
|
||||
recordDisconnect() {
|
||||
this.disconnectedAt = now();
|
||||
logger.log('ConnectionMonitor recorded disconnect');
|
||||
}
|
||||
|
||||
// Private
|
||||
|
||||
startPolling() {
|
||||
this.stopPolling();
|
||||
this.poll();
|
||||
}
|
||||
|
||||
stopPolling() {
|
||||
clearTimeout(this.pollTimeout);
|
||||
}
|
||||
|
||||
poll() {
|
||||
this.pollTimeout = setTimeout(() => {
|
||||
this.reconnectIfStale();
|
||||
this.poll();
|
||||
}, this.getPollInterval());
|
||||
}
|
||||
|
||||
getPollInterval() {
|
||||
const { staleThreshold, reconnectionBackoffRate } = this.constructor;
|
||||
const backoff = (1 + reconnectionBackoffRate) ** Math.min(this.reconnectAttempts, 10);
|
||||
const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate;
|
||||
const jitter = jitterMax * Math.random();
|
||||
return staleThreshold * 1000 * backoff * (1 + jitter);
|
||||
}
|
||||
|
||||
reconnectIfStale() {
|
||||
if (this.connectionIsStale()) {
|
||||
logger.log(
|
||||
`ConnectionMonitor detected stale connection. reconnectAttempts = ${
|
||||
this.reconnectAttempts
|
||||
}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${
|
||||
this.constructor.staleThreshold
|
||||
} s`,
|
||||
);
|
||||
this.reconnectAttempts += 1;
|
||||
if (this.disconnectedRecently()) {
|
||||
logger.log(
|
||||
`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(
|
||||
this.disconnectedAt,
|
||||
)} s`,
|
||||
);
|
||||
} else {
|
||||
logger.log('ConnectionMonitor reopening');
|
||||
this.connection.reopen();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
get refreshedAt() {
|
||||
return this.pingedAt ? this.pingedAt : this.startedAt;
|
||||
}
|
||||
|
||||
connectionIsStale() {
|
||||
return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;
|
||||
}
|
||||
|
||||
disconnectedRecently() {
|
||||
return (
|
||||
this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold
|
||||
);
|
||||
}
|
||||
|
||||
visibilityDidChange() {
|
||||
if (document.visibilityState === 'visible') {
|
||||
setTimeout(() => {
|
||||
if (this.connectionIsStale() || !this.connection.isOpen()) {
|
||||
logger.log(
|
||||
`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`,
|
||||
);
|
||||
this.connection.reopen();
|
||||
}
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ConnectionMonitor.staleThreshold = 6; // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)
|
||||
ConnectionMonitor.reconnectionBackoffRate = 0.15;
|
||||
|
||||
export default ConnectionMonitor;
|
|
@ -1,3 +1,10 @@
|
|||
import { createConsumer } from '@rails/actioncable';
|
||||
import ConnectionMonitor from './actioncable_connection_monitor';
|
||||
|
||||
export default createConsumer();
|
||||
const consumer = createConsumer();
|
||||
|
||||
if (consumer.connection) {
|
||||
consumer.connection.monitor = new ConnectionMonitor(consumer.connection);
|
||||
}
|
||||
|
||||
export default consumer;
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
import $ from 'jquery';
|
||||
import Cookies from 'js-cookie';
|
||||
import Pager from './pager';
|
||||
import { localTimeAgo } from './lib/utils/datetime_utility';
|
||||
import Pager from './pager';
|
||||
|
||||
export default class Activities {
|
||||
constructor(container = '') {
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
<script>
|
||||
import { mapState, mapActions } from 'vuex';
|
||||
import { GlModal, GlTabs, GlTab, GlSearchBoxByType, GlSprintf } from '@gitlab/ui';
|
||||
import { mapState, mapActions } from 'vuex';
|
||||
import ReviewTabContainer from '~/add_context_commits_modal/components/review_tab_container.vue';
|
||||
import { deprecatedCreateFlash as createFlash } from '~/flash';
|
||||
import { BV_SHOW_MODAL } from '~/lib/utils/constants';
|
||||
import { s__ } from '~/locale';
|
||||
import eventHub from '../event_hub';
|
||||
import { deprecatedCreateFlash as createFlash } from '~/flash';
|
||||
import {
|
||||
findCommitIndex,
|
||||
setCommitStatus,
|
||||
|
@ -119,7 +120,7 @@ export default {
|
|||
openModal() {
|
||||
this.searchCommits();
|
||||
this.fetchContextCommits();
|
||||
this.$root.$emit('bv::show::modal', 'add-review-item');
|
||||
this.$root.$emit(BV_SHOW_MODAL, 'add-review-item');
|
||||
},
|
||||
handleTabChange(tabIndex) {
|
||||
if (tabIndex === 0) {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import Vue from 'vue';
|
||||
import { parseBoolean } from '~/lib/utils/common_utils';
|
||||
import createStore from './store';
|
||||
import AddContextCommitsModalTrigger from './components/add_context_commits_modal_trigger.vue';
|
||||
import AddContextCommitsModalWrapper from './components/add_context_commits_modal_wrapper.vue';
|
||||
import createStore from './store';
|
||||
|
||||
export default function initAddContextCommitsTriggers() {
|
||||
const addContextCommitsModalTriggerEl = document.querySelector('.add-review-item-modal-trigger');
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import _ from 'lodash';
|
||||
import axios from '~/lib/utils/axios_utils';
|
||||
import { deprecatedCreateFlash as createFlash } from '~/flash';
|
||||
import { s__ } from '~/locale';
|
||||
import Api from '~/api';
|
||||
import { deprecatedCreateFlash as createFlash } from '~/flash';
|
||||
import axios from '~/lib/utils/axios_utils';
|
||||
import { s__ } from '~/locale';
|
||||
import * as types from './mutation_types';
|
||||
|
||||
export const setBaseConfig = ({ commit }, options) => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<script>
|
||||
import { mapState, mapGetters, mapActions } from 'vuex';
|
||||
import { GlLoadingIcon } from '@gitlab/ui';
|
||||
import { mapState, mapGetters, mapActions } from 'vuex';
|
||||
import statisticsLabels from '../constants';
|
||||
|
||||
export default {
|
||||
|
@ -26,8 +26,8 @@ export default {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<div class="info-well">
|
||||
<div class="well-segment admin-well admin-well-statistics">
|
||||
<div class="gl-card">
|
||||
<div class="gl-card-body">
|
||||
<h4>{{ __('Statistics') }}</h4>
|
||||
<gl-loading-icon v-if="isLoading" size="md" class="my-3" />
|
||||
<template v-else>
|
||||
|
|
|
@ -2,7 +2,7 @@ import Vue from 'vue';
|
|||
import StatisticsPanelApp from './components/app.vue';
|
||||
import createStore from './store';
|
||||
|
||||
export default function (el) {
|
||||
export default function initStatisticsPanel(el) {
|
||||
if (!el) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import Api from '~/api';
|
||||
import { s__ } from '~/locale';
|
||||
import { deprecatedCreateFlash as createFlash } from '~/flash';
|
||||
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
|
||||
import { s__ } from '~/locale';
|
||||
import * as types from './mutation_types';
|
||||
|
||||
export const requestStatistics = ({ commit }) => commit(types.REQUEST_STATISTICS);
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
<script>
|
||||
import { GlDropdownItem } from '@gitlab/ui';
|
||||
import { sprintf, s__ } from '~/locale';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlDropdownItem,
|
||||
},
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
path: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalAttributes() {
|
||||
return {
|
||||
'data-path': this.path,
|
||||
'data-method': 'put',
|
||||
'data-modal-attributes': JSON.stringify({
|
||||
title: sprintf(s__('AdminUsers|Activate user %{username}?'), {
|
||||
username: this.username,
|
||||
}),
|
||||
message: s__('AdminUsers|You can always deactivate their account again if needed.'),
|
||||
okVariant: 'confirm',
|
||||
okTitle: s__('AdminUsers|Activate'),
|
||||
}),
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="js-confirm-modal-button" v-bind="{ ...modalAttributes }">
|
||||
<gl-dropdown-item>
|
||||
<slot></slot>
|
||||
</gl-dropdown-item>
|
||||
</div>
|
||||
</template>
|
|
@ -0,0 +1,21 @@
|
|||
<script>
|
||||
import { GlDropdownItem } from '@gitlab/ui';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlDropdownItem,
|
||||
},
|
||||
props: {
|
||||
path: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<gl-dropdown-item :href="path" data-method="put">
|
||||
<slot></slot>
|
||||
</gl-dropdown-item>
|
||||
</template>
|
|
@ -0,0 +1,53 @@
|
|||
<script>
|
||||
import { GlDropdownItem } from '@gitlab/ui';
|
||||
import { sprintf, s__ } from '~/locale';
|
||||
|
||||
// TODO: To be replaced with <template> content in https://gitlab.com/gitlab-org/gitlab/-/issues/320922
|
||||
const messageHtml = `
|
||||
<p>${s__('AdminUsers|Blocking user has the following effects:')}</p>
|
||||
<ul>
|
||||
<li>${s__('AdminUsers|User will not be able to login')}</li>
|
||||
<li>${s__('AdminUsers|User will not be able to access git repositories')}</li>
|
||||
<li>${s__('AdminUsers|Personal projects will be left')}</li>
|
||||
<li>${s__('AdminUsers|Owned groups will be left')}</li>
|
||||
</ul>
|
||||
`;
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlDropdownItem,
|
||||
},
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
path: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalAttributes() {
|
||||
return {
|
||||
'data-path': this.path,
|
||||
'data-method': 'put',
|
||||
'data-modal-attributes': JSON.stringify({
|
||||
title: sprintf(s__('AdminUsers|Block user %{username}?'), { username: this.username }),
|
||||
okVariant: 'confirm',
|
||||
okTitle: s__('AdminUsers|Block'),
|
||||
messageHtml,
|
||||
}),
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="js-confirm-modal-button" v-bind="{ ...modalAttributes }">
|
||||
<gl-dropdown-item>
|
||||
<slot></slot>
|
||||
</gl-dropdown-item>
|
||||
</div>
|
||||
</template>
|
|
@ -0,0 +1,60 @@
|
|||
<script>
|
||||
import { GlDropdownItem } from '@gitlab/ui';
|
||||
import { sprintf, s__ } from '~/locale';
|
||||
|
||||
// TODO: To be replaced with <template> content in https://gitlab.com/gitlab-org/gitlab/-/issues/320922
|
||||
const messageHtml = `
|
||||
<p>${s__('AdminUsers|Deactivating a user has the following effects:')}</p>
|
||||
<ul>
|
||||
<li>${s__('AdminUsers|The user will be logged out')}</li>
|
||||
<li>${s__('AdminUsers|The user will not be able to access git repositories')}</li>
|
||||
<li>${s__('AdminUsers|The user will not be able to access the API')}</li>
|
||||
<li>${s__('AdminUsers|The user will not receive any notifications')}</li>
|
||||
<li>${s__('AdminUsers|The user will not be able to use slash commands')}</li>
|
||||
<li>${s__(
|
||||
'AdminUsers|When the user logs back in, their account will reactivate as a fully active account',
|
||||
)}</li>
|
||||
<li>${s__('AdminUsers|Personal projects, group and user history will be left intact')}</li>
|
||||
</ul>
|
||||
`;
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlDropdownItem,
|
||||
},
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
path: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalAttributes() {
|
||||
return {
|
||||
'data-path': this.path,
|
||||
'data-method': 'put',
|
||||
'data-modal-attributes': JSON.stringify({
|
||||
title: sprintf(s__('AdminUsers|Deactivate user %{username}?'), {
|
||||
username: this.username,
|
||||
}),
|
||||
okVariant: 'confirm',
|
||||
okTitle: s__('AdminUsers|Deactivate'),
|
||||
messageHtml,
|
||||
}),
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="js-confirm-modal-button" v-bind="{ ...modalAttributes }">
|
||||
<gl-dropdown-item>
|
||||
<slot></slot>
|
||||
</gl-dropdown-item>
|
||||
</div>
|
||||
</template>
|
|
@ -0,0 +1,25 @@
|
|||
<script>
|
||||
import SharedDeleteAction from './shared/shared_delete_action.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
SharedDeleteAction,
|
||||
},
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
paths: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<shared-delete-action modal-type="delete" :username="username" :paths="paths">
|
||||
<slot></slot>
|
||||
</shared-delete-action>
|
||||
</template>
|
|
@ -0,0 +1,25 @@
|
|||
<script>
|
||||
import SharedDeleteAction from './shared/shared_delete_action.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
SharedDeleteAction,
|
||||
},
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
paths: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<shared-delete-action modal-type="delete-with-contributions" :username="username" :paths="paths">
|
||||
<slot></slot>
|
||||
</shared-delete-action>
|
||||
</template>
|
|
@ -0,0 +1,21 @@
|
|||
import Activate from './activate.vue';
|
||||
import Approve from './approve.vue';
|
||||
import Block from './block.vue';
|
||||
import Deactivate from './deactivate.vue';
|
||||
import Delete from './delete.vue';
|
||||
import DeleteWithContributions from './delete_with_contributions.vue';
|
||||
import Reject from './reject.vue';
|
||||
import Unblock from './unblock.vue';
|
||||
import Unlock from './unlock.vue';
|
||||
|
||||
export default {
|
||||
Activate,
|
||||
Approve,
|
||||
Block,
|
||||
Deactivate,
|
||||
Delete,
|
||||
DeleteWithContributions,
|
||||
Unblock,
|
||||
Unlock,
|
||||
Reject,
|
||||
};
|
|
@ -0,0 +1,21 @@
|
|||
<script>
|
||||
import { GlDropdownItem } from '@gitlab/ui';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlDropdownItem,
|
||||
},
|
||||
props: {
|
||||
path: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<gl-dropdown-item :href="path" data-method="delete">
|
||||
<slot></slot>
|
||||
</gl-dropdown-item>
|
||||
</template>
|
|
@ -0,0 +1,43 @@
|
|||
<script>
|
||||
import { GlDropdownItem } from '@gitlab/ui';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlDropdownItem,
|
||||
},
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
paths: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
modalType: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalAttributes() {
|
||||
return {
|
||||
'data-block-user-url': this.paths.block,
|
||||
'data-delete-user-url': this.paths.delete,
|
||||
'data-gl-modal-action': this.modalType,
|
||||
'data-username': this.username,
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="js-delete-user-modal-button" v-bind="{ ...modalAttributes }">
|
||||
<gl-dropdown-item>
|
||||
<span class="gl-text-red-500">
|
||||
<slot></slot>
|
||||
</span>
|
||||
</gl-dropdown-item>
|
||||
</div>
|
||||
</template>
|
|
@ -0,0 +1,44 @@
|
|||
<script>
|
||||
import { GlDropdownItem } from '@gitlab/ui';
|
||||
import { sprintf, s__ } from '~/locale';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlDropdownItem,
|
||||
},
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
path: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalAttributes() {
|
||||
return {
|
||||
'data-path': this.path,
|
||||
'data-method': 'put',
|
||||
'data-modal-attributes': JSON.stringify({
|
||||
title: sprintf(s__('AdminUsers|Unblock user %{username}?'), { username: this.username }),
|
||||
message: s__(
|
||||
'AdminUsers|You can always unblock their account, their data will remain intact.',
|
||||
),
|
||||
okVariant: 'confirm',
|
||||
okTitle: s__('AdminUsers|Unblock'),
|
||||
}),
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="js-confirm-modal-button" v-bind="{ ...modalAttributes }">
|
||||
<gl-dropdown-item>
|
||||
<slot></slot>
|
||||
</gl-dropdown-item>
|
||||
</div>
|
||||
</template>
|
|
@ -0,0 +1,42 @@
|
|||
<script>
|
||||
import { GlDropdownItem } from '@gitlab/ui';
|
||||
import { sprintf, s__, __ } from '~/locale';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlDropdownItem,
|
||||
},
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
path: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
modalAttributes() {
|
||||
return {
|
||||
'data-path': this.path,
|
||||
'data-method': 'put',
|
||||
'data-modal-attributes': JSON.stringify({
|
||||
title: sprintf(s__('AdminUsers|Unlock user %{username}?'), { username: this.username }),
|
||||
message: __('Are you sure?'),
|
||||
okVariant: 'confirm',
|
||||
okTitle: s__('AdminUsers|Unlock'),
|
||||
}),
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="js-confirm-modal-button" v-bind="{ ...modalAttributes }">
|
||||
<gl-dropdown-item>
|
||||
<slot></slot>
|
||||
</gl-dropdown-item>
|
||||
</div>
|
||||
</template>
|
119
app/assets/javascripts/admin/users/components/user_actions.vue
Normal file
|
@ -0,0 +1,119 @@
|
|||
<script>
|
||||
import {
|
||||
GlButton,
|
||||
GlDropdown,
|
||||
GlDropdownItem,
|
||||
GlDropdownSectionHeader,
|
||||
GlDropdownDivider,
|
||||
} from '@gitlab/ui';
|
||||
import { convertArrayToCamelCase } from '~/lib/utils/common_utils';
|
||||
import { capitalizeFirstCharacter } from '~/lib/utils/text_utility';
|
||||
import { I18N_USER_ACTIONS } from '../constants';
|
||||
import { generateUserPaths } from '../utils';
|
||||
import Actions from './actions';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GlButton,
|
||||
GlDropdown,
|
||||
GlDropdownItem,
|
||||
GlDropdownSectionHeader,
|
||||
GlDropdownDivider,
|
||||
...Actions,
|
||||
},
|
||||
props: {
|
||||
user: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
paths: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
userActions() {
|
||||
return convertArrayToCamelCase(this.user.actions);
|
||||
},
|
||||
dropdownActions() {
|
||||
return this.userActions.filter((a) => a !== 'edit');
|
||||
},
|
||||
dropdownDeleteActions() {
|
||||
return this.dropdownActions.filter((a) => a.includes('delete'));
|
||||
},
|
||||
dropdownSafeActions() {
|
||||
return this.dropdownActions.filter((a) => !this.dropdownDeleteActions.includes(a));
|
||||
},
|
||||
hasDropdownActions() {
|
||||
return this.dropdownActions.length > 0;
|
||||
},
|
||||
hasDeleteActions() {
|
||||
return this.dropdownDeleteActions.length > 0;
|
||||
},
|
||||
hasEditAction() {
|
||||
return this.userActions.includes('edit');
|
||||
},
|
||||
userPaths() {
|
||||
return generateUserPaths(this.paths, this.user.username);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
isLdapAction(action) {
|
||||
return action === 'ldapBlocked';
|
||||
},
|
||||
getActionComponent(action) {
|
||||
return Actions[capitalizeFirstCharacter(action)];
|
||||
},
|
||||
},
|
||||
i18n: I18N_USER_ACTIONS,
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="gl-display-flex gl-justify-content-end">
|
||||
<gl-button v-if="hasEditAction" data-testid="edit" :href="userPaths.edit">{{
|
||||
$options.i18n.edit
|
||||
}}</gl-button>
|
||||
|
||||
<gl-dropdown
|
||||
v-if="hasDropdownActions"
|
||||
data-testid="actions"
|
||||
right
|
||||
class="gl-ml-2"
|
||||
icon="settings"
|
||||
>
|
||||
<gl-dropdown-section-header>{{ $options.i18n.settings }}</gl-dropdown-section-header>
|
||||
|
||||
<template v-for="action in dropdownSafeActions">
|
||||
<component
|
||||
:is="getActionComponent(action)"
|
||||
v-if="getActionComponent(action)"
|
||||
:key="action"
|
||||
:path="userPaths[action]"
|
||||
:username="user.name"
|
||||
:data-testid="action"
|
||||
>
|
||||
{{ $options.i18n[action] }}
|
||||
</component>
|
||||
<gl-dropdown-item v-else-if="isLdapAction(action)" :key="action" :data-testid="action">
|
||||
{{ $options.i18n[action] }}
|
||||
</gl-dropdown-item>
|
||||
</template>
|
||||
|
||||
<gl-dropdown-divider v-if="hasDeleteActions" />
|
||||
|
||||
<template v-for="action in dropdownDeleteActions">
|
||||
<component
|
||||
:is="getActionComponent(action)"
|
||||
v-if="getActionComponent(action)"
|
||||
:key="action"
|
||||
:paths="userPaths"
|
||||
:username="user.name"
|
||||
:data-testid="`delete-${action}`"
|
||||
>
|
||||
{{ $options.i18n[action] }}
|
||||
</component>
|
||||
</template>
|
||||
</gl-dropdown>
|
||||
</div>
|
||||
</template>
|
|
@ -1,12 +1,16 @@
|
|||
<script>
|
||||
import { GlAvatarLink, GlAvatarLabeled, GlBadge } from '@gitlab/ui';
|
||||
import { USER_AVATAR_SIZE } from '../constants';
|
||||
import { GlAvatarLabeled, GlBadge, GlIcon, GlTooltipDirective } from '@gitlab/ui';
|
||||
import { truncate } from '~/lib/utils/text_utility';
|
||||
import { USER_AVATAR_SIZE, LENGTH_OF_USER_NOTE_TOOLTIP } from '../constants';
|
||||
|
||||
export default {
|
||||
directives: {
|
||||
GlTooltip: GlTooltipDirective,
|
||||
},
|
||||
components: {
|
||||
GlAvatarLink,
|
||||
GlAvatarLabeled,
|
||||
GlBadge,
|
||||
GlIcon,
|
||||
},
|
||||
props: {
|
||||
user: {
|
||||
|
@ -22,16 +26,23 @@ export default {
|
|||
adminUserHref() {
|
||||
return this.adminUserPath.replace('id', this.user.username);
|
||||
},
|
||||
adminUserMailto() {
|
||||
// NOTE: 'mailto:' is a false positive: https://gitlab.com/gitlab-org/frontend/eslint-plugin-i18n/issues/26#possible-false-positives
|
||||
// eslint-disable-next-line @gitlab/require-i18n-strings
|
||||
return `mailto:${this.user.email}`;
|
||||
},
|
||||
userNoteShort() {
|
||||
return truncate(this.user.note, LENGTH_OF_USER_NOTE_TOOLTIP);
|
||||
},
|
||||
},
|
||||
USER_AVATAR_SIZE,
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<gl-avatar-link
|
||||
<div
|
||||
v-if="user"
|
||||
class="js-user-link"
|
||||
:href="adminUserHref"
|
||||
class="js-user-link gl-display-inline-block"
|
||||
:data-user-id="user.id"
|
||||
:data-username="user.username"
|
||||
>
|
||||
|
@ -40,8 +51,13 @@ export default {
|
|||
:src="user.avatarUrl"
|
||||
:label="user.name"
|
||||
:sub-label="user.email"
|
||||
:label-link="adminUserHref"
|
||||
:sub-label-link="adminUserMailto"
|
||||
>
|
||||
<template #meta>
|
||||
<div v-if="user.note" class="gl-text-gray-500 gl-p-1">
|
||||
<gl-icon v-gl-tooltip="userNoteShort" name="document" />
|
||||
</div>
|
||||
<div v-for="(badge, idx) in user.badges" :key="idx" class="gl-p-1">
|
||||
<gl-badge class="gl-display-flex!" size="sm" :variant="badge.variant">{{
|
||||
badge.text
|
||||
|
@ -49,5 +65,5 @@ export default {
|
|||
</div>
|
||||
</template>
|
||||
</gl-avatar-labeled>
|
||||
</gl-avatar-link>
|
||||
</div>
|
||||
</template>
|
||||
|
|
29
app/assets/javascripts/admin/users/components/user_date.vue
Normal file
|
@ -0,0 +1,29 @@
|
|||
<script>
|
||||
import { formatDate } from '~/lib/utils/datetime_utility';
|
||||
import { __ } from '~/locale';
|
||||
import { SHORT_DATE_FORMAT } from '../constants';
|
||||
|
||||
export default {
|
||||
props: {
|
||||
date: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
formattedDate() {
|
||||
const { date } = this;
|
||||
if (date === null) {
|
||||
return __('Never');
|
||||
}
|
||||
return formatDate(new Date(date), SHORT_DATE_FORMAT);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<template>
|
||||
<span>
|
||||
{{ formattedDate }}
|
||||
</span>
|
||||
</template>
|
|
@ -1,7 +1,9 @@
|
|||
<script>
|
||||
import { GlTable } from '@gitlab/ui';
|
||||
import { __ } from '~/locale';
|
||||
import UserActions from './user_actions.vue';
|
||||
import UserAvatar from './user_avatar.vue';
|
||||
import UserDate from './user_date.vue';
|
||||
|
||||
const DEFAULT_TH_CLASSES =
|
||||
'gl-bg-transparent! gl-border-b-solid! gl-border-b-gray-100! gl-p-5! gl-border-b-1!';
|
||||
|
@ -11,6 +13,8 @@ export default {
|
|||
components: {
|
||||
GlTable,
|
||||
UserAvatar,
|
||||
UserActions,
|
||||
UserDate,
|
||||
},
|
||||
props: {
|
||||
users: {
|
||||
|
@ -62,7 +66,19 @@ export default {
|
|||
stacked="md"
|
||||
>
|
||||
<template #cell(name)="{ item: user }">
|
||||
<UserAvatar :user="user" :admin-user-path="paths.adminUser" />
|
||||
<user-avatar :user="user" :admin-user-path="paths.adminUser" />
|
||||
</template>
|
||||
|
||||
<template #cell(createdAt)="{ item: { createdAt } }">
|
||||
<user-date :date="createdAt" />
|
||||
</template>
|
||||
|
||||
<template #cell(lastActivityOn)="{ item: { lastActivityOn } }">
|
||||
<user-date :date="lastActivityOn" show-never />
|
||||
</template>
|
||||
|
||||
<template #cell(settings)="{ item: user }">
|
||||
<user-actions :user="user" :paths="paths" />
|
||||
</template>
|
||||
</gl-table>
|
||||
</div>
|
||||
|
|
|
@ -1 +1,22 @@
|
|||
import { s__, __ } from '~/locale';
|
||||
|
||||
export const USER_AVATAR_SIZE = 32;
|
||||
|
||||
export const SHORT_DATE_FORMAT = 'd mmm, yyyy';
|
||||
|
||||
export const LENGTH_OF_USER_NOTE_TOOLTIP = 100;
|
||||
|
||||
export const I18N_USER_ACTIONS = {
|
||||
edit: __('Edit'),
|
||||
settings: __('Settings'),
|
||||
unlock: __('Unlock'),
|
||||
block: s__('AdminUsers|Block'),
|
||||
unblock: s__('AdminUsers|Unblock'),
|
||||
approve: s__('AdminUsers|Approve'),
|
||||
reject: s__('AdminUsers|Reject'),
|
||||
deactivate: s__('AdminUsers|Deactivate'),
|
||||
activate: s__('AdminUsers|Activate'),
|
||||
ldapBlocked: s__('AdminUsers|Cannot unblock LDAP blocked users'),
|
||||
delete: s__('AdminUsers|Delete user'),
|
||||
deleteWithContributions: s__('AdminUsers|Delete user and contributions'),
|
||||
};
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import Vue from 'vue';
|
||||
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
|
||||
import AdminUsersApp from './components/app.vue';
|
||||
import UsagePingDisabled from './components/usage_ping_disabled.vue';
|
||||
|
||||
export default function (el = document.querySelector('#js-admin-users-app')) {
|
||||
export const initAdminUsersApp = (el = document.querySelector('#js-admin-users-app')) => {
|
||||
if (!el) {
|
||||
return false;
|
||||
}
|
||||
|
@ -19,4 +20,24 @@ export default function (el = document.querySelector('#js-admin-users-app')) {
|
|||
},
|
||||
}),
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const initCohortsEmptyState = (el = document.querySelector('#js-cohorts-empty-state')) => {
|
||||
if (!el) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const { emptyStateSvgPath, enableUsagePingLink, docsLink } = el.dataset;
|
||||
|
||||
return new Vue({
|
||||
el,
|
||||
provide: {
|
||||
svgPath: emptyStateSvgPath,
|
||||
primaryButtonPath: enableUsagePingLink,
|
||||
docsLink,
|
||||
},
|
||||
render(h) {
|
||||
return h(UsagePingDisabled);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
|
23
app/assets/javascripts/admin/users/tabs.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { historyPushState } from '~/lib/utils/common_utils';
|
||||
import { mergeUrlParams } from '~/lib/utils/url_utility';
|
||||
|
||||
const COHORTS_PANE = 'cohorts';
|
||||
|
||||
const tabClickHandler = (e) => {
|
||||
const { hash } = e.currentTarget;
|
||||
const tab = hash === `#${COHORTS_PANE}` ? COHORTS_PANE : null;
|
||||
const newUrl = mergeUrlParams({ tab }, window.location.href);
|
||||
historyPushState(newUrl);
|
||||
};
|
||||
|
||||
const initTabs = () => {
|
||||
const tabLinks = document.querySelectorAll('.js-users-tab-item a');
|
||||
|
||||
if (tabLinks.length) {
|
||||
tabLinks.forEach((tabLink) => {
|
||||
tabLink.addEventListener('click', (e) => tabClickHandler(e));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export default initTabs;
|
7
app/assets/javascripts/admin/users/utils.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
export const generateUserPaths = (paths, id) => {
|
||||
return Object.fromEntries(
|
||||
Object.entries(paths).map(([action, genericPath]) => {
|
||||
return [action, genericPath.replace('id', id)];
|
||||
}),
|
||||
);
|
||||
};
|
|
@ -11,26 +11,22 @@ import {
|
|||
GlSprintf,
|
||||
GlTooltipDirective,
|
||||
} from '@gitlab/ui';
|
||||
import { s__, __ } from '~/locale';
|
||||
import getAlertsQuery from '~/graphql_shared/queries/get_alerts.query.graphql';
|
||||
import { fetchPolicies } from '~/lib/graphql';
|
||||
import { convertToSnakeCase } from '~/lib/utils/text_utility';
|
||||
import { joinPaths, visitUrl } from '~/lib/utils/url_utility';
|
||||
import PaginatedTableWithSearchAndTabs from '~/vue_shared/components/paginated_table_with_search_and_tabs/paginated_table_with_search_and_tabs.vue';
|
||||
import { s__, __ } from '~/locale';
|
||||
import AlertStatus from '~/vue_shared/alert_details/components/alert_status.vue';
|
||||
import {
|
||||
tdClass,
|
||||
thClass,
|
||||
bodyTrClass,
|
||||
initialPaginationState,
|
||||
} from '~/vue_shared/components/paginated_table_with_search_and_tabs/constants';
|
||||
import PaginatedTableWithSearchAndTabs from '~/vue_shared/components/paginated_table_with_search_and_tabs/paginated_table_with_search_and_tabs.vue';
|
||||
import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue';
|
||||
import { convertToSnakeCase } from '~/lib/utils/text_utility';
|
||||
import getAlertsQuery from '~/graphql_shared/queries/get_alerts.query.graphql';
|
||||
import { ALERTS_STATUS_TABS, SEVERITY_LEVELS, trackAlertListViewsOptions } from '../constants';
|
||||
import getAlertsCountByStatus from '../graphql/queries/get_count_by_status.query.graphql';
|
||||
import {
|
||||
ALERTS_STATUS_TABS,
|
||||
ALERTS_SEVERITY_LABELS,
|
||||
trackAlertListViewsOptions,
|
||||
} from '../constants';
|
||||
import AlertStatus from './alert_status.vue';
|
||||
|
||||
const TH_TEST_ID = { 'data-testid': 'alert-management-severity-sort' };
|
||||
|
||||
|
@ -96,7 +92,7 @@ export default {
|
|||
sortable: true,
|
||||
},
|
||||
],
|
||||
severityLabels: ALERTS_SEVERITY_LABELS,
|
||||
severityLabels: SEVERITY_LEVELS,
|
||||
statusTabs: ALERTS_STATUS_TABS,
|
||||
components: {
|
||||
GlAlert,
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import { s__ } from '~/locale';
|
||||
|
||||
export const ALERTS_SEVERITY_LABELS = {
|
||||
CRITICAL: s__('AlertManagement|Critical'),
|
||||
HIGH: s__('AlertManagement|High'),
|
||||
MEDIUM: s__('AlertManagement|Medium'),
|
||||
LOW: s__('AlertManagement|Low'),
|
||||
INFO: s__('AlertManagement|Info'),
|
||||
UNKNOWN: s__('AlertManagement|Unknown'),
|
||||
export const SEVERITY_LEVELS = {
|
||||
CRITICAL: s__('severity|Critical'),
|
||||
HIGH: s__('severity|High'),
|
||||
MEDIUM: s__('severity|Medium'),
|
||||
LOW: s__('severity|Low'),
|
||||
INFO: s__('severity|Info'),
|
||||
UNKNOWN: s__('severity|Unknown'),
|
||||
};
|
||||
|
||||
export const ALERTS_STATUS_TABS = [
|
||||
|
@ -46,20 +46,3 @@ export const trackAlertListViewsOptions = {
|
|||
category: 'Alert Management',
|
||||
action: 'view_alerts_list',
|
||||
};
|
||||
|
||||
/**
|
||||
* Tracks snowplow event when user views alert details
|
||||
*/
|
||||
export const trackAlertsDetailsViewsOptions = {
|
||||
category: 'Alert Management',
|
||||
action: 'view_alert_details',
|
||||
};
|
||||
|
||||
/**
|
||||
* Tracks snowplow event when alert status is updated
|
||||
*/
|
||||
export const trackAlertStatusUpdateOptions = {
|
||||
category: 'Alert Management',
|
||||
action: 'update_alert_status',
|
||||
label: 'Status',
|
||||
};
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import { defaultDataIdFromObject } from 'apollo-cache-inmemory';
|
||||
import Vue from 'vue';
|
||||
import VueApollo from 'vue-apollo';
|
||||
import { defaultDataIdFromObject } from 'apollo-cache-inmemory';
|
||||
import createDefaultClient from '~/lib/graphql';
|
||||
import { parseBoolean } from '~/lib/utils/common_utils';
|
||||
import { PAGE_CONFIG } from '~/vue_shared/alert_details/constants';
|
||||
import AlertManagementList from './components/alert_management_list_wrapper.vue';
|
||||
|
||||
Vue.use(VueApollo);
|
||||
|
@ -59,6 +60,7 @@ export default () => {
|
|||
populatingAlertsHelpUrl,
|
||||
emptyAlertSvgPath,
|
||||
alertManagementEnabled: parseBoolean(alertManagementEnabled),
|
||||
trackAlertStatusUpdateOptions: PAGE_CONFIG.OPERATIONS.TRACK_ALERT_STATUS_UPDATE_OPTIONS,
|
||||
userCanEnableAlertManagement: parseBoolean(userCanEnableAlertManagement),
|
||||
},
|
||||
apolloProvider,
|
||||
|
|
|
@ -1,187 +0,0 @@
|
|||
<script>
|
||||
import {
|
||||
GlButton,
|
||||
GlFormGroup,
|
||||
GlFormInput,
|
||||
GlLink,
|
||||
GlModal,
|
||||
GlModalDirective,
|
||||
GlSprintf,
|
||||
} from '@gitlab/ui';
|
||||
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
|
||||
import ToggleButton from '~/vue_shared/components/toggle_button.vue';
|
||||
import axios from '~/lib/utils/axios_utils';
|
||||
import { s__, __ } from '~/locale';
|
||||
import { deprecatedCreateFlash as createFlash } from '~/flash';
|
||||
|
||||
export default {
|
||||
i18n: {
|
||||
usageSection: s__(
|
||||
'AlertService|You must provide this URL and authorization key to authorize an external service to send alerts to GitLab. You can provide this URL and key to multiple services. After configuring an external service, alerts from your service will display on the GitLab %{linkStart}Alerts%{linkEnd} page.',
|
||||
),
|
||||
setupSection: s__(
|
||||
"AlertService|Review your external service's documentation to learn where to provide this information to your external service, and the %{linkStart}GitLab documentation%{linkEnd} to learn more about configuring your endpoint.",
|
||||
),
|
||||
},
|
||||
COPY_TO_CLIPBOARD: __('Copy'),
|
||||
RESET_KEY: __('Reset key'),
|
||||
components: {
|
||||
GlButton,
|
||||
GlFormGroup,
|
||||
GlFormInput,
|
||||
GlLink,
|
||||
GlModal,
|
||||
GlSprintf,
|
||||
ClipboardButton,
|
||||
ToggleButton,
|
||||
},
|
||||
directives: {
|
||||
'gl-modal': GlModalDirective,
|
||||
},
|
||||
props: {
|
||||
alertsSetupUrl: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
alertsUsageUrl: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
initialAuthorizationKey: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
formPath: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
initialActivated: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
isDisabled: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activated: this.initialActivated,
|
||||
loadingActivated: false,
|
||||
authorizationKey: this.initialAuthorizationKey,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
sections() {
|
||||
return [
|
||||
{
|
||||
text: this.$options.i18n.usageSection,
|
||||
url: this.alertsUsageUrl,
|
||||
},
|
||||
{
|
||||
text: this.$options.i18n.setupSection,
|
||||
url: this.alertsSetupUrl,
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
resetKey() {
|
||||
return axios
|
||||
.put(this.formPath, { service: { token: '' } })
|
||||
.then((res) => {
|
||||
this.authorizationKey = res.data.token;
|
||||
})
|
||||
.catch(() => {
|
||||
createFlash(__('Failed to reset key. Please try again.'));
|
||||
});
|
||||
},
|
||||
toggleActivated(value) {
|
||||
this.loadingActivated = true;
|
||||
return axios
|
||||
.put(this.formPath, { service: { active: value } })
|
||||
.then(() => {
|
||||
this.activated = value;
|
||||
this.loadingActivated = false;
|
||||
})
|
||||
.catch(() => {
|
||||
createFlash(__('Update failed. Please try again.'));
|
||||
this.loadingActivated = false;
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div data-testid="description">
|
||||
<p v-for="section in sections" :key="section.text">
|
||||
<gl-sprintf :message="section.text">
|
||||
<template #link="{ content }">
|
||||
<gl-link :href="section.url" target="_blank">{{ content }}</gl-link>
|
||||
</template>
|
||||
</gl-sprintf>
|
||||
</p>
|
||||
</div>
|
||||
<gl-form-group :label="__('Active')" label-for="activated" label-class="label-bold">
|
||||
<toggle-button
|
||||
id="activated"
|
||||
:disabled-input="loadingActivated || isDisabled"
|
||||
:is-loading="loadingActivated"
|
||||
:value="activated"
|
||||
@change="toggleActivated"
|
||||
/>
|
||||
</gl-form-group>
|
||||
<gl-form-group :label="__('URL')" label-for="url" label-class="label-bold">
|
||||
<div class="input-group">
|
||||
<gl-form-input id="url" :readonly="true" :value="url" />
|
||||
<span class="input-group-append">
|
||||
<clipboard-button
|
||||
:text="url"
|
||||
:title="$options.COPY_TO_CLIPBOARD"
|
||||
:disabled="isDisabled"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
</gl-form-group>
|
||||
<gl-form-group
|
||||
:label="__('Authorization key')"
|
||||
label-for="authorization-key"
|
||||
label-class="label-bold"
|
||||
>
|
||||
<div class="input-group">
|
||||
<gl-form-input id="authorization-key" :readonly="true" :value="authorizationKey" />
|
||||
<span class="input-group-append">
|
||||
<clipboard-button
|
||||
:text="authorizationKey"
|
||||
:title="$options.COPY_TO_CLIPBOARD"
|
||||
:disabled="isDisabled"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
<gl-button v-gl-modal.authKeyModal class="gl-mt-2" :disabled="isDisabled">{{
|
||||
$options.RESET_KEY
|
||||
}}</gl-button>
|
||||
<gl-modal
|
||||
modal-id="authKeyModal"
|
||||
:title="$options.RESET_KEY"
|
||||
:ok-title="$options.RESET_KEY"
|
||||
ok-variant="danger"
|
||||
@ok="resetKey"
|
||||
>
|
||||
{{
|
||||
__(
|
||||
'Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in.',
|
||||
)
|
||||
}}
|
||||
</gl-modal>
|
||||
</gl-form-group>
|
||||
</div>
|
||||
</template>
|
|
@ -1,39 +0,0 @@
|
|||
import Vue from 'vue';
|
||||
import { parseBoolean } from '~/lib/utils/common_utils';
|
||||
import AlertsServiceForm from './components/alerts_service_form.vue';
|
||||
|
||||
export default (el) => {
|
||||
if (!el) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const {
|
||||
activated: activatedStr,
|
||||
alertsSetupUrl,
|
||||
alertsUsageUrl,
|
||||
formPath,
|
||||
authorizationKey,
|
||||
url,
|
||||
disabled,
|
||||
} = el.dataset;
|
||||
|
||||
const activated = parseBoolean(activatedStr);
|
||||
const isDisabled = parseBoolean(disabled);
|
||||
|
||||
return new Vue({
|
||||
el,
|
||||
render(createElement) {
|
||||
return createElement(AlertsServiceForm, {
|
||||
props: {
|
||||
alertsSetupUrl,
|
||||
alertsUsageUrl,
|
||||
initialActivated: activated,
|
||||
formPath,
|
||||
initialAuthorizationKey: authorizationKey,
|
||||
url,
|
||||
isDisabled,
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
};
|
|
@ -1,5 +1,4 @@
|
|||
<script>
|
||||
import Vue from 'vue';
|
||||
import {
|
||||
GlIcon,
|
||||
GlFormInput,
|
||||
|
@ -8,11 +7,15 @@ import {
|
|||
GlSearchBoxByType,
|
||||
GlTooltipDirective as GlTooltip,
|
||||
} from '@gitlab/ui';
|
||||
import { cloneDeep } from 'lodash';
|
||||
import Vue from 'vue';
|
||||
import { capitalizeFirstCharacter } from '~/lib/utils/text_utility';
|
||||
import { s__, __ } from '~/locale';
|
||||
// Mocks will be removed when integrating with BE is ready
|
||||
// data format is defined and will be the same as mocked (maybe with some minor changes)
|
||||
// feature rollout plan - https://gitlab.com/gitlab-org/gitlab/-/issues/262707#note_442529171
|
||||
import gitlabFieldsMock from './mocks/gitlabFields.json';
|
||||
import {
|
||||
getMappingData,
|
||||
getPayloadFields,
|
||||
transformForSave,
|
||||
} from '../utils/mapping_transformations';
|
||||
|
||||
export const i18n = {
|
||||
columns: {
|
||||
|
@ -40,18 +43,25 @@ export default {
|
|||
directives: {
|
||||
GlTooltip,
|
||||
},
|
||||
inject: {
|
||||
gitlabAlertFields: {
|
||||
default: gitlabFieldsMock,
|
||||
},
|
||||
},
|
||||
props: {
|
||||
payloadFields: {
|
||||
alertFields: {
|
||||
type: Array,
|
||||
required: true,
|
||||
validator: (fields) => {
|
||||
return (
|
||||
fields.length &&
|
||||
fields.every(({ name, types, label }) => {
|
||||
return typeof name === 'string' && Array.isArray(types) && typeof label === 'string';
|
||||
})
|
||||
);
|
||||
},
|
||||
},
|
||||
parsedPayload: {
|
||||
type: Array,
|
||||
required: false,
|
||||
default: () => [],
|
||||
},
|
||||
mapping: {
|
||||
savedMapping: {
|
||||
type: Array,
|
||||
required: false,
|
||||
default: () => [],
|
||||
|
@ -59,31 +69,18 @@ export default {
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
gitlabFields: this.gitlabAlertFields,
|
||||
gitlabFields: cloneDeep(this.alertFields),
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
payloadFields() {
|
||||
return getPayloadFields(this.parsedPayload);
|
||||
},
|
||||
mappingData() {
|
||||
return this.gitlabFields.map((gitlabField) => {
|
||||
const mappingFields = this.payloadFields.filter(({ type }) =>
|
||||
type.some((t) => gitlabField.compatibleTypes.includes(t)),
|
||||
);
|
||||
|
||||
const foundMapping = this.mapping.find(
|
||||
({ alertFieldName }) => alertFieldName === gitlabField.name,
|
||||
);
|
||||
|
||||
const { fallbackAlertPaths, payloadAlertPaths } = foundMapping || {};
|
||||
|
||||
return {
|
||||
mapping: payloadAlertPaths,
|
||||
fallback: fallbackAlertPaths,
|
||||
searchTerm: '',
|
||||
fallbackSearchTerm: '',
|
||||
mappingFields,
|
||||
...gitlabField,
|
||||
};
|
||||
});
|
||||
return getMappingData(this.gitlabFields, this.payloadFields, this.savedMapping);
|
||||
},
|
||||
hasFallbackColumn() {
|
||||
return this.gitlabFields.some(({ numberOfFallbacks }) => Boolean(numberOfFallbacks));
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
@ -91,6 +88,7 @@ export default {
|
|||
const fieldIndex = this.gitlabFields.findIndex((field) => field.name === gitlabKey);
|
||||
const updatedField = { ...this.gitlabFields[fieldIndex], ...{ [valueKey]: mappingKey } };
|
||||
Vue.set(this.gitlabFields, fieldIndex, updatedField);
|
||||
this.$emit('onMappingUpdate', transformForSave(this.mappingData));
|
||||
},
|
||||
setSearchTerm(search = '', searchFieldKey, gitlabKey) {
|
||||
const fieldIndex = this.gitlabFields.findIndex((field) => field.name === gitlabKey);
|
||||
|
@ -99,7 +97,6 @@ export default {
|
|||
},
|
||||
filterFields(searchTerm = '', fields) {
|
||||
const search = searchTerm.toLowerCase();
|
||||
|
||||
return fields.filter((field) => field.label.toLowerCase().includes(search));
|
||||
},
|
||||
isSelected(fieldValue, mapping) {
|
||||
|
@ -111,8 +108,10 @@ export default {
|
|||
this.$options.i18n.makeSelection
|
||||
);
|
||||
},
|
||||
getFieldValue({ label, type }) {
|
||||
return `${label} (${type.join(__(' or '))})`;
|
||||
getFieldValue({ label, types }) {
|
||||
const type = types.map((t) => capitalizeFirstCharacter(t.toLowerCase())).join(__(' or '));
|
||||
|
||||
return `${label} (${type})`;
|
||||
},
|
||||
noResults(searchTerm, fields) {
|
||||
return !this.filterFields(searchTerm, fields).length;
|
||||
|
@ -131,7 +130,11 @@ export default {
|
|||
<h5 id="parsedFieldsHeader" class="gl-display-table-cell gl-py-3 gl-pr-3">
|
||||
{{ $options.i18n.columns.payloadKeyTitle }}
|
||||
</h5>
|
||||
<h5 id="fallbackFieldsHeader" class="gl-display-table-cell gl-py-3 gl-pr-3">
|
||||
<h5
|
||||
v-if="hasFallbackColumn"
|
||||
id="fallbackFieldsHeader"
|
||||
class="gl-display-table-cell gl-py-3 gl-pr-3"
|
||||
>
|
||||
{{ $options.i18n.columns.fallbackKeyTitle }}
|
||||
<gl-icon
|
||||
v-gl-tooltip
|
||||
|
|