New upstream version 14.7.4+ds1

This commit is contained in:
Pirate Praveen 2022-03-02 08:16:31 +05:30
parent ae28033eb9
commit 0d67b01f61
3928 changed files with 124983 additions and 52548 deletions

View file

@ -5,7 +5,7 @@
# Following are the files we need: # Following are the files we need:
# - ./config/initializers/0_inject_enterprise_edition_module.rb # - ./config/initializers/0_inject_enterprise_edition_module.rb
# - ./ee/app/models/license.rb # - ./ee/app/models/license.rb
# - ./lib/gitlab.rb # - ./lib/gitlab_edition.rb
# - ./lib/gitlab/utils.rb # - ./lib/gitlab/utils.rb
# - ./qa/ # - ./qa/
# - ./INSTALLATION_TYPE # - ./INSTALLATION_TYPE

View file

@ -99,6 +99,10 @@ overrides:
rules: rules:
'@gitlab/require-i18n-strings': off '@gitlab/require-i18n-strings': off
'@gitlab/no-runtime-template-compiler': off '@gitlab/no-runtime-template-compiler': off
'no-restricted-syntax':
- error
- selector: CallExpression[callee.object.name=/(wrapper|vm)/][callee.property.name="setData"]
message: 'Avoid using "setData" on VTU wrapper'
- files: - files:
- 'config/**/*' - 'config/**/*'
- 'scripts/**/*' - 'scripts/**/*'

1
.gitignore vendored
View file

@ -13,6 +13,7 @@
eslint-report.html eslint-report.html
/.gitlab_shell_secret /.gitlab_shell_secret
.idea .idea
.nova
/.vscode/* /.vscode/*
/.rbenv-version /.rbenv-version
.rbx/ .rbx/

View file

@ -80,6 +80,7 @@ variables:
CACHE_CLASSES: "true" CACHE_CLASSES: "true"
CHECK_PRECOMPILED_ASSETS: "true" CHECK_PRECOMPILED_ASSETS: "true"
FF_USE_FASTZIP: "true" FF_USE_FASTZIP: "true"
SKIP_FLAKY_TESTS_AUTOMATICALLY: "true"
DOCS_REVIEW_APPS_DOMAIN: "178.62.207.141.nip.io" DOCS_REVIEW_APPS_DOMAIN: "178.62.207.141.nip.io"
DOCS_GITLAB_REPO_SUFFIX: "ee" DOCS_GITLAB_REPO_SUFFIX: "ee"

View file

@ -6,161 +6,6 @@
*.rb @gitlab-org/maintainers/rails-backend *.rb @gitlab-org/maintainers/rails-backend
*.rake @gitlab-org/maintainers/rails-backend *.rake @gitlab-org/maintainers/rails-backend
[Documentation Directories]
.markdownlint.yml @marcel.amirault @eread @aqualls @cnorris
/doc/.markdownlint @marcel.amirault @eread @aqualls @cnorris
/doc/ @gl-docsteam
/doc/.vale/ @marcel.amirault @eread @aqualls @cnorris
/doc/administration/geo/ @axil
/doc/administration/gitaly/ @eread
/doc/administration/lfs/ @aqualls
/doc/administration/monitoring/ @ngaskill
/doc/administration/operations/ @axil @eread @marcia
/doc/administration/packages/ @ngaskill
/doc/administration/pages/ @rdickenson @kpaizee
/doc/administration/postgresql/ @marcia
/doc/administration/raketasks/ @axil @eread
/doc/administration/redis/ @axil
/doc/administration/reference_architectures/ @axil
/doc/administration/snippets/ @aqualls
/doc/administration/troubleshooting @axil @marcia @eread
/doc/api/graphql/ @msedlakjakubowski @kpaizee
/doc/api/graphql/reference/ @kpaizee
/doc/api/group_activity_analytics.md @fneill
/doc/api/vulnerabilities.md @fneill
/doc/ci/ @marcel.amirault @sselhorn
/doc/ci/environments/ @rdickenson
/doc/ci/services/ @sselhorn
/doc/ci/test_cases/ @msedlakjakubowski
/doc/development/ @marcia
/doc/development/documentation/ @cnorris @dianalogan
/doc/development/i18n/ @ngaskill
/doc/development/value_stream_analytics.md @fneill
/doc/gitlab-basics/ @aqualls
/doc/install/ @axil
/doc/operations/ @ngaskill @rdickenson
/doc/push_rules/ @aqualls
/doc/security/ @eread
/doc/ssh/ @eread
/doc/subscriptions/ @sselhorn
/doc/topics/autodevops/ @marcia
/doc/topics/git/ @aqualls
/doc/update/ @axil @marcia
/doc/user/analytics/ @fneill @ngaskill
/doc/user/application_security/ @rdickenson
/doc/user/application_security/container_scanning/ @ngaskill
/doc/user/application_security/cluster_image_scanning/ @ngaskill
/doc/user/application_security/cve_id_request.md @fneill
/doc/user/application_security/security_dashboard @fneill
/doc/user/application_security/vulnerabilities @fneill
/doc/user/application_security/vulnerability_report @fneill
/doc/user/clusters/ @marcia
/doc/user/compliance/ @rdickenson @eread
/doc/user/group/ @msedlakjakubowski
/doc/user/group/devops_adoption/ @fneill
/doc/user/group/epics/ @msedlakjakubowski
/doc/user/group/insights/ @fneill
/doc/user/group/iterations/ @msedlakjakubowski
/doc/user/group/roadmap/ @msedlakjakubowski
/doc/user/group/value_stream_analytics/ @fneill
/doc/user/infrastructure/ @marcia
/doc/user/packages/ @ngaskill
/doc/user/packages/infrastructure_registry/ @marcia
/doc/user/packages/terraform_module_registry/ @marcia
/doc/user/profile/ @msedlakjakubowski @eread
/doc/user/project/ @aqualls @rdickenson @eread @msedlakjakubowski @ngaskill
/doc/user/project/clusters/ @marcia
/doc/user/project/import/ @ngaskill @msedlakjakubowski
/doc/user/project/issues/ @msedlakjakubowski
/doc/user/project/merge_requests/ @aqualls @eread
/doc/user/project/milestones/ @msedlakjakubowski
/doc/user/project/pages/ @rdickenson
/doc/user/project/repository/ @aqualls
/doc/user/project/settings/ @aqualls @eread
/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
/doc/user/workspace/ @fneill
[Docs Create]
/doc/administration/file_hooks.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/services.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/index.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/project_integration_management.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
[Docs Ecosystem]
/doc/administration/integration/ @kpaizee
/doc/integration/ @kpaizee
/doc/user/project/integrations/ @kpaizee
/doc/user/project/integrations/prometheus_library/ @ngaskill
[Docs Growth]
/doc/administration/instance_review.md @kpaizee
/doc/api/invitations.md @kpaizee
/doc/api/experiments.md @kpaizee
/doc/development/experiment_guide/ @kpaizee
/doc/development/snowplow/ @fneill
/doc/development/service_ping/ @fneill
/doc/user/admin_area/license.md @kpaizee
[Frontend] [Frontend]
*.scss @annabeldunstone @gitlab-org/maintainers/frontend *.scss @annabeldunstone @gitlab-org/maintainers/frontend
*.js @gitlab-org/maintainers/frontend *.js @gitlab-org/maintainers/frontend
@ -357,3 +202,158 @@ ee/lib/ee/gitlab/git_access.rb @proglottis @toon @zj-gitlab
ee/lib/ee/gitlab/git_access_*.rb @proglottis @toon @zj-gitlab ee/lib/ee/gitlab/git_access_*.rb @proglottis @toon @zj-gitlab
ee/lib/ee/gitlab/checks/** @proglottis @toon @zj-gitlab ee/lib/ee/gitlab/checks/** @proglottis @toon @zj-gitlab
lib/gitlab/checks/** @proglottis @toon @zj-gitlab lib/gitlab/checks/** @proglottis @toon @zj-gitlab
[Documentation Directories]
.markdownlint.yml @marcel.amirault @eread @aqualls @cnorris
/doc/.markdownlint @marcel.amirault @eread @aqualls @cnorris
/doc/ @gl-docsteam
/doc/.vale/ @marcel.amirault @eread @aqualls @cnorris
/doc/administration/geo/ @axil
/doc/administration/gitaly/ @eread
/doc/administration/lfs/ @aqualls
/doc/administration/monitoring/ @ngaskill
/doc/administration/operations/ @axil @eread @marcia
/doc/administration/packages/ @ngaskill
/doc/administration/pages/ @rdickenson @kpaizee
/doc/administration/postgresql/ @marcia
/doc/administration/raketasks/ @axil @eread
/doc/administration/redis/ @axil
/doc/administration/reference_architectures/ @axil
/doc/administration/snippets/ @aqualls
/doc/administration/troubleshooting @axil @marcia @eread
/doc/api/graphql/ @msedlakjakubowski @kpaizee
/doc/api/graphql/reference/ @kpaizee
/doc/api/group_activity_analytics.md @fneill
/doc/api/vulnerabilities.md @fneill
/doc/ci/ @marcel.amirault @sselhorn
/doc/ci/environments/ @rdickenson
/doc/ci/services/ @sselhorn
/doc/ci/test_cases/ @msedlakjakubowski
/doc/development/ @marcia
/doc/development/documentation/ @cnorris @dianalogan
/doc/development/i18n/ @ngaskill
/doc/development/value_stream_analytics.md @fneill
/doc/gitlab-basics/ @aqualls
/doc/install/ @axil
/doc/operations/ @ngaskill @rdickenson
/doc/push_rules/ @aqualls
/doc/security/ @eread
/doc/ssh/ @eread
/doc/subscriptions/ @sselhorn
/doc/topics/autodevops/ @marcia
/doc/topics/git/ @aqualls
/doc/update/ @axil @marcia
/doc/user/analytics/ @fneill @ngaskill
/doc/user/application_security/ @rdickenson
/doc/user/application_security/container_scanning/ @ngaskill
/doc/user/application_security/cluster_image_scanning/ @ngaskill
/doc/user/application_security/cve_id_request.md @fneill
/doc/user/application_security/security_dashboard @fneill
/doc/user/application_security/vulnerabilities @fneill
/doc/user/application_security/vulnerability_report @fneill
/doc/user/clusters/ @marcia
/doc/user/compliance/ @rdickenson @eread
/doc/user/group/ @msedlakjakubowski
/doc/user/group/devops_adoption/ @fneill
/doc/user/group/epics/ @msedlakjakubowski
/doc/user/group/insights/ @fneill
/doc/user/group/iterations/ @msedlakjakubowski
/doc/user/group/roadmap/ @msedlakjakubowski
/doc/user/group/value_stream_analytics/ @fneill
/doc/user/infrastructure/ @marcia
/doc/user/packages/ @ngaskill
/doc/user/packages/infrastructure_registry/ @marcia
/doc/user/packages/terraform_module_registry/ @marcia
/doc/user/profile/ @msedlakjakubowski @eread
/doc/user/project/ @aqualls @rdickenson @eread @msedlakjakubowski @ngaskill
/doc/user/project/clusters/ @marcia
/doc/user/project/import/ @ngaskill @msedlakjakubowski
/doc/user/project/issues/ @msedlakjakubowski
/doc/user/project/merge_requests/ @aqualls @eread
/doc/user/project/milestones/ @msedlakjakubowski
/doc/user/project/pages/ @rdickenson
/doc/user/project/repository/ @aqualls
/doc/user/project/settings/ @aqualls @eread
/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
/doc/user/workspace/ @fneill
[Docs Create]
/doc/administration/file_hooks.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/services.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/index.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/project_integration_management.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
[Docs Ecosystem]
/doc/administration/integration/ @kpaizee
/doc/integration/ @kpaizee
/doc/user/project/integrations/ @kpaizee
/doc/user/project/integrations/prometheus_library/ @ngaskill
[Docs Growth]
/doc/administration/instance_review.md @kpaizee
/doc/api/invitations.md @kpaizee
/doc/api/experiments.md @kpaizee
/doc/development/experiment_guide/ @kpaizee
/doc/development/snowplow/ @fneill
/doc/development/service_ping/ @fneill
/doc/user/admin_area/license.md @kpaizee

View file

@ -44,7 +44,7 @@ docs-lint markdown:
- .default-retry - .default-retry
- .docs:rules:docs-lint - .docs:rules:docs-lint
# When updating the image version here, update it in /scripts/lint-doc.sh too. # When updating the image version here, update it in /scripts/lint-doc.sh too.
image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-markdown:alpine-3.14-vale-2.12.0-markdownlint-0.29.0 image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-markdown:alpine-3.15-vale-2.14.0-markdownlint-0.30.0
stage: lint stage: lint
needs: [] needs: []
script: script:
@ -53,7 +53,7 @@ docs-lint markdown:
docs-lint links: docs-lint links:
extends: extends:
- .docs:rules:docs-lint - .docs:rules:docs-lint
image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-html:alpine-3.14-ruby-2.7.5-08847baa image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-html:alpine-3.15-ruby-2.7.5-cee62c13
stage: lint stage: lint
needs: [] needs: []
script: script:
@ -77,15 +77,16 @@ ui-docs-links lint:
script: script:
- bundle exec haml-lint -i DocumentationLinks - bundle exec haml-lint -i DocumentationLinks
docs-lint deprecations: docs-lint deprecations-and-removals:
variables: variables:
SETUP_DB: "false" SETUP_DB: "false"
extends: extends:
- .default-retry - .default-retry
- .rails-cache - .rails-cache
- .default-before_script - .default-before_script
- .docs:rules:deprecations - .docs:rules:deprecations-and-removals
stage: lint stage: lint
needs: [] needs: []
script: script:
- bundle exec rake gitlab:docs:check_deprecations - bundle exec rake gitlab:docs:check_deprecations
- bundle exec rake gitlab:docs:check_removals

View file

@ -306,6 +306,11 @@ qa-frontend-node:latest:
- .qa-frontend-node - .qa-frontend-node
- .frontend:rules:qa-frontend-node-latest - .frontend:rules:qa-frontend-node-latest
image: ${GITLAB_DEPENDENCY_PROXY}node:latest image: ${GITLAB_DEPENDENCY_PROXY}node:latest
# This is a workaround for https://github.com/webpack/webpack/issues/14532 until
# we can upgrade to Webpack 5 and switch to SHA256: https://gitlab.com/gitlab-org/gitlab/-/issues/350120
script:
- *yarn-install
- run_timed_command "retry yarn run webpack-prod-node-latest"
webpack-dev-server: webpack-dev-server:
extends: extends:

View file

@ -33,6 +33,15 @@ qa:selectors:
script: script:
- bundle exec bin/qa Test::Sanity::Selectors - bundle exec bin/qa Test::Sanity::Selectors
qa:auto_quarantine:
extends:
- .qa-job-base
rules:
- if: '$QA_TRIGGER_AUTO_QUARANTINE =~ /true|yes|1/i'
script:
- bundle exec confiner -r .confiner/quarantine.yml
allow_failure: true
qa:selectors-as-if-foss: qa:selectors-as-if-foss:
extends: extends:
- qa:selectors - qa:selectors

View file

@ -346,7 +346,7 @@ rspec fast_spec_helper minimal:
db:rollback: db:rollback:
extends: .db-job-base extends: .db-job-base
script: script:
- scripts/db_tasks db:migrate VERSION=20181228175414 - scripts/db_tasks db:migrate VERSION=20210301200959
- scripts/db_tasks db:migrate SKIP_SCHEMA_VERSION_CHECK=true - scripts/db_tasks db:migrate SKIP_SCHEMA_VERSION_CHECK=true
db:rollback decomposed: db:rollback decomposed:
@ -360,6 +360,12 @@ db:migrate:reset:
script: script:
- bundle exec rake db:migrate:reset - bundle exec rake db:migrate:reset
db:migrate:reset decomposed:
extends:
- db:migrate:reset
- .decomposed-database
- .rails:rules:decomposed-databases
db:migrate-from-previous-major-version: db:migrate-from-previous-major-version:
extends: .db-job-base extends: .db-job-base
variables: variables:
@ -457,7 +463,7 @@ db:backup_and_restore:
script: script:
- . scripts/prepare_build.sh - . scripts/prepare_build.sh
- bundle exec rake db:drop db:create db:structure:load db:seed_fu - bundle exec rake db:drop db:create db:structure:load db:seed_fu
- mkdir -p tmp/tests/public/uploads tmp/tests/{artifacts,pages,lfs-objects,registry} - mkdir -p tmp/tests/public/uploads tmp/tests/{artifacts,pages,lfs-objects,terraform_state,registry,packages}
- bundle exec rake gitlab:backup:create - bundle exec rake gitlab:backup:create
- date - date
- bundle exec rake gitlab:backup:restore - bundle exec rake gitlab:backup:restore
@ -592,8 +598,10 @@ rspec:undercoverage:
else else
echo "Using \$CI_COMMIT_SHA ($CI_COMMIT_SHA) for this non-merge result pipeline."; echo "Using \$CI_COMMIT_SHA ($CI_COMMIT_SHA) for this non-merge result pipeline.";
fi; fi;
- UNDERCOVERAGE_COMPARE="${CI_MERGE_REQUEST_DIFF_BASE_SHA:-$(git merge-base origin/master HEAD)}"
- echo "Undercoverage comparing with ${UNDERCOVERAGE_COMPARE}"
- if [ -f scripts/undercoverage ]; then - if [ -f scripts/undercoverage ]; then
run_timed_command "scripts/undercoverage"; run_timed_command "scripts/undercoverage ${UNDERCOVERAGE_COMPARE}";
fi; fi;
rspec:feature-flags: rspec:feature-flags:

View file

@ -45,7 +45,6 @@
# 10019, 10021 Missing security headers # 10019, 10021 Missing security headers
# 10023, 10024, 10025, 10037 Information Disclosure # 10023, 10024, 10025, 10037 Information Disclosure
# 10040 Secure Pages Include Mixed Content # 10040 Secure Pages Include Mixed Content
# 10055 CSP
# 10056 X-Debug-Token Information Leak # 10056 X-Debug-Token Information Leak
# Duration: 14 minutes 20 seconds # Duration: 14 minutes 20 seconds
@ -54,7 +53,7 @@ dast:secureHeaders-csp-infoLeak:
- .dast_conf - .dast_conf
variables: variables:
DAST_USERNAME: "user1" DAST_USERNAME: "user1"
DAST_ONLY_INCLUDE_RULES: "10019,10021,10023,10024,10025,10037,10040,10055,10056" DAST_ONLY_INCLUDE_RULES: "10019,10021,10023,10024,10025,10037,10040,10056"
script: script:
- /analyze - /analyze

View file

@ -26,35 +26,22 @@
- export CI_ENVIRONMENT_URL="$(cat environment_url.txt)" - export CI_ENVIRONMENT_URL="$(cat environment_url.txt)"
- echo "${CI_ENVIRONMENT_URL}" - echo "${CI_ENVIRONMENT_URL}"
- cd qa - cd qa
- if [ -n "$KNAPSACK_REPORT_PATH" ]; then
bundle exec rake knapsack:download;
fi
artifacts:
paths:
- qa/tmp
expire_in: 7 days
when: always
.parallel-qa-base:
parallel: 5
variables:
KNAPSACK_TEST_FILE_PATTERN: "qa/specs/features/**/*_spec.rb"
script: script:
- | - |
bin/test "${QA_SCENARIO}" "${CI_ENVIRONMENT_URL}" \ bin/test "${QA_SCENARIO}" "${CI_ENVIRONMENT_URL}" \
-- \ -- \
--color --format documentation \ --color --format documentation \
--format RspecJunitFormatter --out tmp/rspec.xml --format RspecJunitFormatter --out tmp/rspec.xml
after_script:
- if [ -n "$KNAPSACK_GENERATE_REPORT" ]; then
mv qa/${KNAPSACK_REPORT_PATH} qa/knapsack/gcs/regenerated-${CI_NODE_INDEX}.json;
fi
artifacts: artifacts:
paths: paths:
- qa/tmp # we can't merge list so need to include explicitly once more - qa/tmp
- qa/knapsack/gcs/regenerated-*.json
reports: reports:
junit: qa/tmp/rspec.xml junit: qa/tmp/rspec.xml
expire_in: 7 days
when: always
.parallel-qa-base:
parallel: 5
.allure-report-base: .allure-report-base:
image: image:
@ -79,16 +66,6 @@
--ignore-missing-results \ --ignore-missing-results \
--color --color
.knapsack-upload-base:
image:
name: ${QA_IMAGE}
entrypoint: [""]
stage: post-qa
before_script:
- cd qa
script:
- bundle exec rake 'knapsack:upload[knapsack/gcs/regenerated-*.json]'
review-qa-smoke: review-qa-smoke:
extends: extends:
- .review-qa-base - .review-qa-base
@ -96,8 +73,8 @@ review-qa-smoke:
retry: 1 # This is confusing but this means "2 runs at max". retry: 1 # This is confusing but this means "2 runs at max".
variables: variables:
QA_RUN_TYPE: review-qa-smoke QA_RUN_TYPE: review-qa-smoke
script: QA_SCENARIO: Test::Instance::Smoke
- bin/test Test::Instance::Smoke "${CI_ENVIRONMENT_URL}"
review-qa-reliable: review-qa-reliable:
extends: extends:
@ -108,7 +85,6 @@ review-qa-reliable:
variables: variables:
QA_RUN_TYPE: review-qa-reliable QA_RUN_TYPE: review-qa-reliable
QA_SCENARIO: Test::Instance::Reliable QA_SCENARIO: Test::Instance::Reliable
KNAPSACK_REPORT_PATH: knapsack/gcs/review-qa-reliable.json
review-qa-all: review-qa-all:
extends: extends:
@ -118,7 +94,6 @@ review-qa-all:
variables: variables:
QA_RUN_TYPE: review-qa-all QA_RUN_TYPE: review-qa-all
QA_SCENARIO: Test::Instance::All QA_SCENARIO: Test::Instance::All
KNAPSACK_REPORT_PATH: knapsack/gcs/review-qa-all.json
review-performance: review-performance:
extends: extends:
@ -155,6 +130,15 @@ allure-report-qa-smoke:
ALLURE_REPORT_PATH_PREFIX: gitlab-review-smoke ALLURE_REPORT_PATH_PREFIX: gitlab-review-smoke
ALLURE_JOB_NAME: review-qa-smoke ALLURE_JOB_NAME: review-qa-smoke
allure-report-qa-reliable:
extends:
- .allure-report-base
- .review:rules:review-qa-reliable-report
needs: ["review-qa-reliable"]
variables:
ALLURE_REPORT_PATH_PREFIX: gitlab-review-reliable
ALLURE_JOB_NAME: review-qa-reliable
allure-report-qa-all: allure-report-qa-all:
extends: extends:
- .allure-report-base - .allure-report-base
@ -164,18 +148,15 @@ allure-report-qa-all:
ALLURE_REPORT_PATH_PREFIX: gitlab-review-all ALLURE_REPORT_PATH_PREFIX: gitlab-review-all
ALLURE_JOB_NAME: review-qa-all ALLURE_JOB_NAME: review-qa-all
knapsack-report-qa-all: knapsack-report:
extends: extends:
- .knapsack-upload-base - .review:rules:knapsack-report
- .review:rules:knapsack-report-qa-all image:
needs: ["review-qa-all"] name: ${QA_IMAGE}
variables: entrypoint: [""]
KNAPSACK_REPORT_PATH: knapsack/gcs/review-qa-all.json stage: post-qa
allow_failure: true
knapsack-report-qa-reliable: before_script:
extends: - cd qa
- .knapsack-upload-base script:
- .review:rules:knapsack-report-qa-reliable - bundle exec rake 'knapsack:upload[tmp/knapsack/*/*.json]'
needs: ["review-qa-reliable"]
variables:
KNAPSACK_REPORT_PATH: knapsack/gcs/review-qa-reliable.json

View file

@ -171,12 +171,13 @@
- ".markdownlint.yml" - ".markdownlint.yml"
- "scripts/lint-doc.sh" - "scripts/lint-doc.sh"
.docs-deprecations-patterns: &docs-deprecations-patterns .docs-deprecations-and-removals-patterns: &docs-deprecations-and-removals-patterns
- "doc/update/deprecations.md" - "doc/update/deprecations.md"
- "data/deprecations/*.yml" - "doc/update/removals.md"
- "data/deprecations/templates/_deprecation_template.md.erb" - "data/deprecations/**/*"
- "data/removals/**/*"
- "tooling/docs/**/*"
- "lib/tasks/gitlab/docs/compile_deprecations.rake" - "lib/tasks/gitlab/docs/compile_deprecations.rake"
- "tooling/deprecations/docs.rb"
.bundler-patterns: &bundler-patterns .bundler-patterns: &bundler-patterns
- '{Gemfile.lock,*/Gemfile.lock,*/*/Gemfile.lock}' - '{Gemfile.lock,*/Gemfile.lock,*/*/Gemfile.lock}'
@ -228,6 +229,9 @@
- "vendor/assets/**/*" - "vendor/assets/**/*"
- "{,ee/,jh/}{app/assets,app/helpers,app/presenters,app/views,locale,public,symbol}/**/*" - "{,ee/,jh/}{app/assets,app/helpers,app/presenters,app/views,locale,public,symbol}/**/*"
.controllers-patterns: &controllers-patterns
- "{,ee/,jh/}{app/controllers}/**/*"
.startup-css-patterns: &startup-css-patterns .startup-css-patterns: &startup-css-patterns
- "{,ee/,jh/}app/assets/stylesheets/startup/**/*" - "{,ee/,jh/}app/assets/stylesheets/startup/**/*"
@ -279,7 +283,7 @@
- ".dockerignore" - ".dockerignore"
- "qa/**/*" - "qa/**/*"
# Code patterns + .ci-patterns + .workhorse-patterns # Code patterns + .ci-patterns
.code-patterns: &code-patterns .code-patterns: &code-patterns
- "{package.json,yarn.lock}" - "{package.json,yarn.lock}"
- ".browserslistrc" - ".browserslistrc"
@ -541,10 +545,10 @@
changes: *docs-patterns changes: *docs-patterns
when: on_success when: on_success
.docs:rules:deprecations: .docs:rules:deprecations-and-removals:
rules: rules:
- <<: *if-default-refs - <<: *if-default-refs
changes: *docs-deprecations-patterns changes: *docs-deprecations-and-removals-patterns
################## ##################
# GraphQL rules # # GraphQL rules #
@ -1612,12 +1616,14 @@
changes: *ci-review-patterns changes: *ci-review-patterns
- <<: *if-dot-com-gitlab-org-merge-request - <<: *if-dot-com-gitlab-org-merge-request
changes: *frontend-patterns changes: *frontend-patterns
- <<: *if-dot-com-gitlab-org-merge-request
changes: *controllers-patterns
- <<: *if-dot-com-gitlab-org-merge-request
changes: *qa-patterns
- <<: *if-dot-com-gitlab-org-merge-request - <<: *if-dot-com-gitlab-org-merge-request
changes: *code-patterns changes: *code-patterns
when: manual when: manual
allow_failure: true allow_failure: true
- <<: *if-dot-com-gitlab-org-merge-request
changes: *qa-patterns
- <<: *if-dot-com-gitlab-org-schedule - <<: *if-dot-com-gitlab-org-schedule
variables: variables:
KNAPSACK_GENERATE_REPORT: "true" KNAPSACK_GENERATE_REPORT: "true"
@ -1648,56 +1654,51 @@
rules: rules:
- when: on_success - when: on_success
# The rule needs to be duplicated between `on_success` and `on_failure` # If the needed job isn't allowed to fail, we need to use `when: always` in
# because the jobs `needs` the previous job to complete. # order to keep the job always running after it.
# With `when: always`, and the `review-qa-*` jobs are manual, the `allure-report-qa-*` jobs #
# would start running before the qa jobs have started. # If the needed job is allowed to fail, we need to use both
# See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63844#note_599012559 # `when: on_success` and `when: on_failure` in order to keep
# the job always running after it.
# Not that if the needed job has `when: on_success` we can use `when: always`
# for the depending job.
#
# See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/76756
# Since `review-qa-smoke` isn't allowed to fail, we need to use `when: always` for `review-qa-smoke-report`.
.review:rules:review-qa-smoke-report: .review:rules:review-qa-smoke-report:
rules: rules:
- when: on_success - when: always
- when: on_failure
.review:rules:review-qa-reliable: .review:rules:review-qa-reliable:
rules: rules:
- when: on_success - when: on_success
allow_failure: true
# Since `review-qa-reliable` isn't allowed to fail, we need to use `when: always`for `review-qa-reliable-report`.
.review:rules:review-qa-reliable-report:
rules:
- when: always
.review:rules:review-qa-all: .review:rules:review-qa-all:
rules: rules:
- <<: *if-merge-request-labels-run-review-app # we explicitely don't allow the job to fail in that case - <<: *if-merge-request-labels-run-review-app # we explicitly don't allow the job to fail in that case
- <<: *if-dot-com-gitlab-org-merge-request - <<: *if-dot-com-gitlab-org-merge-request
changes: *code-patterns changes: *code-patterns
when: manual when: manual
allow_failure: true # manual jobs needs to be allowd to fail, otherwise they block the pipeline allow_failure: true # manual jobs needs to be allowed to fail, otherwise they block the pipeline
- when: on_success - when: on_success
allow_failure: true allow_failure: true
# The rule needs to be duplicated between `on_success` and `on_failure` # Since `review-qa-all` is allowed to fail (and potentially manual), we need to use `when: on_success` and `when: on_failure` for `review-qa-all-report`.
# because the jobs `needs` the previous job to complete.
# With `when: always`, and the `review-qa-*` jobs are manual, the `allure-report-qa-*` jobs
# would start running before the qa jobs have started.
# See https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63844#note_599012559
.review:rules:review-qa-all-report: .review:rules:review-qa-all-report:
rules: rules:
- when: on_success - when: on_success
allow_failure: true
- when: on_failure - when: on_failure
allow_failure: true
# Generate knapsack report on successful runs only .review:rules:knapsack-report:
# Reliable suite will pass most of the time so this should yield best distribution
.review:rules:knapsack-report-qa-reliable:
rules:
- if: '$KNAPSACK_GENERATE_REPORT == "true"'
when: on_success
allow_failure: true
.review:rules:knapsack-report-qa-all:
rules: rules:
- if: '$KNAPSACK_GENERATE_REPORT == "true"' - if: '$KNAPSACK_GENERATE_REPORT == "true"'
when: always when: always
allow_failure: true
.review:rules:review-cleanup: .review:rules:review-cleanup:
rules: rules:

View file

@ -151,14 +151,17 @@ detect-previous-failed-tests:
add-jh-folder: add-jh-folder:
extends: .setup:rules:add-jh-folder extends: .setup:rules:add-jh-folder
image: ${GITLAB_DEPENDENCY_PROXY}alpine:edge image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7
stage: prepare stage: prepare
before_script: before_script:
- apk add --no-cache --update curl bash - source ./scripts/utils.sh
- install_gitlab_gem
script: script:
- curl --location -o "jh-folder.tar.gz" "https://gitlab.com/gitlab-jh/gitlab/-/archive/main-jh/gitlab-main-jh.tar.gz?path=jh" - JH_BRANCH=$(./scripts/setup/find-jh-branch.rb)
- 'echo "JH_BRANCH: ${JH_BRANCH}"'
- curl --location -o "jh-folder.tar.gz" "https://gitlab.com/gitlab-jh/gitlab/-/archive/${JH_BRANCH}/gitlab-${JH_BRANCH}.tar.gz?path=jh"
- tar -xf "jh-folder.tar.gz" - tar -xf "jh-folder.tar.gz"
- mv gitlab-main-jh-jh/jh/ ./ - mv "gitlab-${JH_BRANCH}-jh/jh/" ./
- cp Gemfile.lock jh/ - cp Gemfile.lock jh/
- ls -l jh/ - ls -l jh/
artifacts: artifacts:

View file

@ -10,4 +10,4 @@ lint-yaml:
variables: variables:
LINT_PATHS: .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates LINT_PATHS: .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates
script: script:
- yamllint -f colored $LINT_PATHS - yamllint --strict -f colored $LINT_PATHS

View file

@ -1,10 +1,10 @@
<!-- Title suggestion: [Experiment Rollout] experiment-key - description of experiment --> <!-- Title suggestion: [Experiment Rollout] feature-flag-name - description of experiment -->
## Summary ## Summary
This issue tracks the rollout and status of an experiment through to removal. This issue tracks the rollout and status of an experiment through to removal.
1. Experiment key / feature flag name: `<experiment-key>` 1. Feature flag name: `<feature-flag-name>`
1. Epic or issue link: `<issue or epic link>` 1. Epic or issue link: `<issue or epic link>`
This is an experiment rollout issue This is an experiment rollout issue
@ -55,7 +55,7 @@ Note: you can use the [CXL calculator](https://cxl.com/ab-test-calculator/) to d
- Runtime in days, or until we expect to reach statistical significance: `30` - Runtime in days, or until we expect to reach statistical significance: `30`
- We will roll this out behind a feature flag and expose this to `<rollout-percentage>`% of actors to start then ramp it up from there. - We will roll this out behind a feature flag and expose this to `<rollout-percentage>`% of actors to start then ramp it up from there.
`/chatops run feature set <experiment-key> <rollout-percentage> --actors` `/chatops run feature set <feature-flag-name> <rollout-percentage> --actors`
### Status ### Status
@ -83,14 +83,14 @@ In this rollout issue, ensure the scoped `experiment::` label is kept accurate.
## Roll Out Steps ## Roll Out Steps
- [ ] [Confirm that end-to-end tests pass with the feature flag enabled](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/feature_flags.html#confirming-that-end-to-end-tests-pass-with-a-feature-flag-enabled). If there are failing tests, contact the relevant [stable counterpart in the Quality department](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors) to collaborate in updating the tests or confirming that the failing tests are not caused by the changes behind the enabled feature flag. - [ ] [Confirm that end-to-end tests pass with the feature flag enabled](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/feature_flags.html#confirming-that-end-to-end-tests-pass-with-a-feature-flag-enabled). If there are failing tests, contact the relevant [stable counterpart in the Quality department](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors) to collaborate in updating the tests or confirming that the failing tests are not caused by the changes behind the enabled feature flag.
- [ ] Enable on staging (`/chatops run feature set <experiment-key> true --staging`) - [ ] Enable on staging (`/chatops run feature set <feature-flag-name> true --staging`)
- [ ] Test on staging - [ ] Test on staging
- [ ] Ensure that documentation has been updated - [ ] Ensure that documentation has been updated
- [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour (`/chatops run feature set --project=gitlab-org/gitlab feature_name true`) - [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour (`/chatops run feature set --project=gitlab-org/gitlab <feature-flag-name> true`)
- [ ] Coordinate a time to enable the flag with the SRE oncall and release managers - [ ] Coordinate a time to enable the flag with the SRE oncall and release managers
- In `#production` mention `@sre-oncall` and `@release-managers`. Once an SRE on call and Release Manager on call confirm, you can proceed with the rollout - In `#production` mention `@sre-oncall` and `@release-managers`. Once an SRE on call and Release Manager on call confirm, you can proceed with the rollout
- [ ] Announce on the issue an estimated time this will be enabled on GitLab.com - [ ] Announce on the issue an estimated time this will be enabled on GitLab.com
- [ ] Enable on GitLab.com by running chatops command in `#production` (`/chatops run feature set feature_name true`) - [ ] Enable on GitLab.com by running chatops command in `#production` (`/chatops run feature set <feature-flag-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 - [ ] 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 - [ ] Announce on the issue that the flag has been enabled
- [ ] Remove experiment code and feature flag and add changelog entry - a separate [cleanup issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Experiment%20Successful%20Cleanup) might be required - [ ] Remove experiment code and feature flag and add changelog entry - a separate [cleanup issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Experiment%20Successful%20Cleanup) might be required
@ -102,7 +102,7 @@ In this rollout issue, ensure the scoped `experiment::` label is kept accurate.
- [ ] This feature can be disabled by running the following Chatops command: - [ ] This feature can be disabled by running the following Chatops command:
``` ```
/chatops run feature set <experiment-key> false /chatops run feature set <feature-flag-name> false
``` ```
## Experiment Successful Cleanup Concerns ## Experiment Successful Cleanup Concerns

View file

@ -13,6 +13,6 @@ Use the following resources to find the appropriate labels:
- https://about.gitlab.com/handbook/product/categories/features/ - https://about.gitlab.com/handbook/product/categories/features/
--> -->
/label ~"group::" ~"section::" ~"Category::" /label ~group:: ~section:: ~Category:
/label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate" /label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate"
/label ~"type::feature" ~"feature::addition" ~documentation /label ~"type::feature" ~"feature::addition" ~documentation

View file

@ -52,7 +52,6 @@ Use the following resources to find the appropriate labels:
- https://about.gitlab.com/handbook/product/categories/features/ - https://about.gitlab.com/handbook/product/categories/features/
--> -->
/label ~"type::feature" /label ~group:: ~section:: ~Category:
/label ~"group::" ~"section::" ~"Category::"
/label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate" /label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate"
/label ~documentation ~direction /label ~"type::feature" ~documentation ~direction

View file

@ -118,6 +118,6 @@ Use the following resources to find the appropriate labels:
- https://gitlab.com/gitlab-org/gitlab/-/labels - https://gitlab.com/gitlab-org/gitlab/-/labels
- https://about.gitlab.com/handbook/product/categories/features/ - https://about.gitlab.com/handbook/product/categories/features/
--> -->
/label ~"group::" ~"section::" ~"Category::" /label ~group:: ~section:: ~Category:
/label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate" /label ~"GitLab Free" ~"GitLab Premium" ~"GitLab Ultimate"
/label ~"type::feature" ~documentation ~direction /label ~"type::feature" ~documentation ~direction

View file

@ -175,8 +175,8 @@ That's all of the required database changes.
#### Step 1. Implement replication and verification #### Step 1. Implement replication and verification
- [ ] Add the following lines to the `cool_widget` model to accomplish some important tasks: - [ ] Add the following lines to the `cool_widget` model to accomplish some important tasks:
- Include `Gitlab::Geo::ReplicableModel` in the `CoolWidget` class, and specify the Replicator class `with_replicator Geo::CoolWidgetReplicator`. - Include `::Geo::ReplicableModel` in the `CoolWidget` class, and specify the Replicator class `with_replicator Geo::CoolWidgetReplicator`.
- Include the `::Gitlab::Geo::VerificationState` concern. - Include the `::Geo::VerifiableModel` concern.
- Delegate verification related methods to the `cool_widget_state` model. - Delegate verification related methods to the `cool_widget_state` model.
- For verification, override some scopes to use the `cool_widget_states` table instead of the model table. - For verification, override some scopes to use the `cool_widget_states` table instead of the model table.
- Implement the `verification_state_object` method to return the object that holds - Implement the `verification_state_object` method to return the object that holds
@ -192,8 +192,8 @@ That's all of the required database changes.
class CoolWidget < ApplicationRecord class CoolWidget < ApplicationRecord
... ...
include ::Gitlab::Geo::ReplicableModel include ::Geo::ReplicableModel
include ::Gitlab::Geo::VerificationState include ::Geo::VerifiableModel
with_replicator Geo::CoolWidgetReplicator with_replicator Geo::CoolWidgetReplicator

View file

@ -179,8 +179,8 @@ That's all of the required database changes.
#### Step 1. Implement replication and verification #### Step 1. Implement replication and verification
- [ ] Add the following lines to the `cool_widget` model to accomplish some important tasks: - [ ] Add the following lines to the `cool_widget` model to accomplish some important tasks:
- Include `Gitlab::Geo::ReplicableModel` in the `CoolWidget` class, and specify the Replicator class `with_replicator Geo::CoolWidgetReplicator`. - Include `::Geo::ReplicableModel` in the `CoolWidget` class, and specify the Replicator class `with_replicator Geo::CoolWidgetReplicator`.
- Include the `::Gitlab::Geo::VerificationState` concern. - Include the `::Geo::VerifiableModel` concern.
- Delegate verification related methods to the `cool_widget_state` model. - Delegate verification related methods to the `cool_widget_state` model.
- For verification, override some scopes to use the `cool_widget_states` table instead of the model table. - For verification, override some scopes to use the `cool_widget_states` table instead of the model table.
- Implement the `verification_state_object` method to return the object that holds - Implement the `verification_state_object` method to return the object that holds
@ -194,8 +194,8 @@ That's all of the required database changes.
class CoolWidget < ApplicationRecord class CoolWidget < ApplicationRecord
... ...
include ::Gitlab::Geo::ReplicableModel include ::Geo::ReplicableModel
include ::Gitlab::Geo::VerificationState include ::Geo::VerifiableModel
with_replicator Geo::CoolWidgetReplicator with_replicator Geo::CoolWidgetReplicator

View file

@ -0,0 +1,23 @@
<!--
Performance Indicator Metric issues are used for adding, updating, or removing performance indicator type in Service Ping metrics.
Please title your issue with the following format: "{action}(Add|Update|Remove) Metric name as performance indicator"
Example of title: "Add static_site_editor_views as gmau"
-->
## Summary
<!--
Summary of the changes
-->
## Tasks
- [ ] [Link to metric definition]()
- [ ] Create issue in GitLab Data Team project using [Product Performance Indicator template](https://gitlab.com/gitlab-data/analytics/-/issues/new?issuable_template=Product%20Performance%20Indicator%20Template)
See [Product Intelligence Guide](https://docs.gitlab.com/ee/development/service_ping/performance_indicator_metrics.html) for details
/label ~"product intelligence" ~"Data Warehouse::Impact Check"

View file

@ -53,6 +53,7 @@ After your merge request has been approved according to our [approval guidelines
| Description | Link | | Description | Link |
| -------- | -------- | | -------- | -------- |
| Issue on [GitLab](https://gitlab.com/gitlab-org/gitlab/issues) | #TODO | | Issue on [GitLab](https://gitlab.com/gitlab-org/gitlab/issues) | #TODO |
| CVE ID request on [`gitlab-org/cves`](https://gitlab.com/gitlab-org/cves/-/issues?sort=created_date&state=opened) | #TODO for AppSec |
### Details ### Details

View file

@ -2,21 +2,23 @@
/label ~"release post" ~"release post item" ~"Technical Writing" ~"devops::" ~"group::" ~"release post item::deprecation" /label ~"release post" ~"release post item" ~"Technical Writing" ~"devops::" ~"group::" ~"release post item::deprecation"
/milestone % /milestone %
/assign `@PM` /assign `@EM/PM` (choose the DRI; remove backticks here, and below)
**Be sure to link this MR to the relevant deprecation issue(s).** **Be sure to link this MR to the relevant deprecation issue(s).**
If the MR does not have a deprecation issue, hit pause and review [this handbook documentation](https://about.gitlab.com/handbook/product/gitlab-the-product/#process-for-deprecating-and-removing-a-feature) and connect with the Product Manager DRI.
Deprecation announcements can and should be created and merged into Docs at any time, to optimize user awareness and planning. We encourage confirmed deprecations to be merged as soon as the required reviews are complete, even if weeks ahead of the target milestone's release post. For the announcement to be included in a specific release post and that release's documentation packages, this MR must be reviewed/merged per the due dates below: Deprecation announcements can and should be created and merged into Docs at any time, to optimize user awareness and planning. We encourage confirmed deprecations to be merged as soon as the required reviews are complete, even if weeks ahead of the target milestone's release post. For the announcement to be included in a specific release post and that release's documentation packages, this MR must be reviewed/merged per the due dates below:
**By the 10th**: Assign this MR to these team members as Reviewer and for Approval (optional unless noted as required): **By the 10th**: Assign this MR to these team members as Reviewer and for Approval (optional unless noted as required):
- Product Marketing: `@PMM` - Product Marketing: `@PMM`
- Product Designer(s): `@ProductDesigners` - Product Designer(s): `@ProductDesigners`
- Group Manager or Director: `@manager` - Product Group Manager or Director: `@PM` - Required
- Engineering Manager: `@EM` - Required - Engineering Manager: `@EM` - Required
- Technical writer: `@TW` - Required - Technical writer: `@TW` - Required
**By 11:59 AM PDT 15th**: PM assigns this MR to the TW reviewer for final review and merge: `@PM` **By 11:59 AM PDT 15th**: EM/PM assigns this MR to the TW reviewer for final review and merge: `@EM/PM`
**By 11:59 PM PDT 17th**: TW Reviewer updates Docs by merging this MR to `master`: `@TW` **By 11:59 PM PDT 17th**: TW Reviewer updates Docs by merging this MR to `master`: `@TW`
@ -31,9 +33,9 @@ They are frequently updated, and everyone should make sure they are aware of the
- Deprecation Issue: - Deprecation Issue:
- Deprecation MR (optional): - Deprecation MR (optional):
## PM release post item checklist ## EM/PM release post item checklist
- [ ] Set yourself as the Assignee. - [ ] Set yourself as the Assignee, meaning you are the DRI.
- [ ] If the deprecation is a [breaking change](https://about.gitlab.com/handbook/product/gitlab-the-product/#breaking-change), add label `breaking change`. - [ ] If the deprecation is a [breaking change](https://about.gitlab.com/handbook/product/gitlab-the-product/#breaking-change), add label `breaking change`.
- [ ] Follow the process to [create a deprecation YAML file](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-a-deprecation-entry). - [ ] Follow the process to [create a deprecation YAML file](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-a-deprecation-entry).
- [ ] Add reviewers by the 10th. - [ ] Add reviewers by the 10th.

View file

@ -0,0 +1,103 @@
<!-- Set the correct label and milestone using autocomplete for guidance. Please @mention only the DRI(s) for each stage or group rather than an entire department. -->
**Be sure to link this MR to the relevant deprecation issue(s).**
If the MR does not have a deprecation issue, hit pause and:
- Review [this handbook documentation](https://about.gitlab.com/handbook/product/gitlab-the-product/#process-for-deprecating-and-removing-a-feature).
- Connect with the Product Manager DRI.
Removals must be [announced as Deprecations](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecations) at least 2 milestones in advance of the planned removal date. Removals can only be removed in a XX.0 major release if it creates a [breaking change](https://about.gitlab.com/handbook/product/gitlab-the-product/#breaking-changes-deprecations-and-removing-features).
**By the 10th**: Assign this MR to these team members as reviewers, and for approval:
- Required:
- Product Group Manager or Director: `@PM`
- Engineering Manager: `@EM`
- Technical writer: `@TW`
- Optional:
- Product Designer(s): `@ProductDesigners`
- Product Marketing: `@PMM`
**By 7:59 PM UTC 15th (11:59 AM PT)**: EM/PM assigns this MR to the TW reviewer for final review and merge: `@EM/PM`
**By 7:59 AM UTC 18th (11:59 PM PT 17th)**: TW Reviewer updates Docs by merging this MR to `master`: `@TW`
---
Please review the [guidelines for removals](https://about.gitlab.com/handbook/marketing/blog/release-posts/#removals).
## Links
- Removal Issue:
- Removal MR (optional):
## EM/PM release post item checklist
- [ ] Set yourself as the Assignee, meaning you are the DRI.
- [ ] If the removal is a [breaking change](https://about.gitlab.com/handbook/product/gitlab-the-product/#breaking-change), add label `breaking change`.
- [ ] Follow the process to [create a removal YAML file](https://about.gitlab.com/handbook/marketing/blog/release-posts/#creating-a-removal-entry).
- [ ] Add reviewers by the 10th.
- [ ] When ready to be merged and not later than the 15th, add the ~ready label and @ message the TW for final review and merge.
## Reviewers
When the content is ready for review, the Technical Writer and Engineering Manager _must_
review it. Optional reviewers can include Product Marketing, Product Design, and the Product Leaders
for this area. Use the
[Reviewers for Merge Requests](https://docs.gitlab.com/ee/user/project/merge_requests/getting_started#reviewer)
feature for all reviews. Reviewers will `approve` the MR and remove themselves from the reviewers list when their review is complete.
- [ ] (Recommended) PMM
- [ ] (Optional) Product Designer
- [ ] (Optional) Group Manager or Director
- [ ] Required review and approval: [Technical Writer designated to the corresponding DevOps stage/group](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments).
### Tech writer review
The TW should review according to the criteria listed below. Review a removal MR
with the same process as regular docs MRs. Add suggestions as needed, @ message
the PM to inform them the first review is complete, and remove
yourself as a reviewer if it's not yet ready for merge.
<details>
<summary>Expand for Details</summary>
- [ ] Title:
- Length limit: 7 words (not including articles or prepositions).
- Capitalization: ensure the title is [sentence cased](https://design.gitlab.com/content/punctuation#case).
- No Markdown `` `code` `` formatting in the title, as it doesn't render correctly in the release post.
- [ ] Consistency:
- Ensure that all resources (docs, removal, etc.) refer to the feature with the same term / feature name.
- [ ] Content:
- Make sure the removal is accurate based on your understanding. Look for typos or grammar mistakes. Work with PM and PMM to ensure a consistent GitLab style and tone for messaging, based on other features and removals.
- Review use of whitespace and bullet lists. Will the removal item be easily scannable when published? Consider adding line breaks or breaking content into bullets if you have more than a few sentences.
- Make sure there aren't acronyms readers may not understand per <https://about.gitlab.com/handbook/communication/#writing-style-guidelines>.
- [ ] Links:
- All links must be full URLs, as the removal YAML files are used in multiple projects. Do not use relative links. The generated doc is an exception to the relative link rule and currently uses absolute links only.
- Make sure all links and anchors are correct. Do not link to the H1 (top) anchor on a docs page.
- [ ] Code. Make sure any included code is wrapped in code blocks.
- [ ] Capitalization. Make sure to capitalize feature names. Stay consistent with the Documentation Style Guidance on [Capitalization](https://docs.gitlab.com/ee/development/documentation/styleguide.html#capitalization).
- [ ] Blank spaces. Remove unnecessary spaces (end of line spaces, double spaces, extra blank lines, and lines with only spaces).
</details>
When the PM indicates it is ready for merge and all issues have been addressed, start the merge process.
#### Technical writer merge process
The [removals doc's `.md` file](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/update/removals.md)
must be updated before this MR is merged:
1. Check out the MR's branch (in the [`gitlab-org/gitlab`](https://gitlab.com/gitlab-org/gitlab) project).
1. From the command line (in the branch), run `bin/rake gitlab:docs:compile_removals`.
If you want to double check that it worked, you can run `bin/rake gitlab:docs:check_removals`
to verify that the doc is up to date.
1. Commit the updated file and push the changes.
1. Set the MR to merge when the pipeline succeeds (or merge if the pipeline is already complete).
If you have trouble running the rake task, check the [troubleshooting steps](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecation-rake-task-troubleshooting).
/label ~"release post" ~"release post item" ~"Technical Writing" ~devops:: ~group:: ~"release post item::removal"
/milestone %
/assign `@EM/PM` (choose the DRI; remove backticks here, and below)

View file

@ -26,6 +26,7 @@ proper-names:
names: [ names: [
"Akismet", "Akismet",
"Alertmanager", "Alertmanager",
"AlmaLinux",
"API", "API",
"Asana", "Asana",
"Auth0", "Auth0",
@ -91,7 +92,7 @@ proper-names:
"markdownlint", "markdownlint",
"Mattermost", "Mattermost",
"Microsoft", "Microsoft",
"Minikube", "minikube",
"MinIO", "MinIO",
"ModSecurity", "ModSecurity",
"NGINX Ingress", "NGINX Ingress",
@ -103,6 +104,7 @@ proper-names:
"OpenID", "OpenID",
"OpenShift", "OpenShift",
"PgBouncer", "PgBouncer",
"Postfix",
"PostgreSQL", "PostgreSQL",
"Praefect", "Praefect",
"Prometheus", "Prometheus",
@ -117,6 +119,7 @@ proper-names:
"runit", "runit",
"Salesforce", "Salesforce",
"SAML", "SAML",
"Sendmail",
"Sentry", "Sentry",
"Sidekiq", "Sidekiq",
"Shibboleth", "Shibboleth",

View file

@ -325,7 +325,6 @@ Performance/Sum:
- 'lib/container_registry/tag.rb' - 'lib/container_registry/tag.rb'
- 'lib/gitlab/ci/reports/test_suite_comparer.rb' - 'lib/gitlab/ci/reports/test_suite_comparer.rb'
- 'lib/gitlab/diff/file.rb' - 'lib/gitlab/diff/file.rb'
- 'lib/gitlab/sherlock/transaction.rb'
- 'lib/gitlab/usage_data.rb' - 'lib/gitlab/usage_data.rb'
- 'lib/peek/views/detailed_view.rb' - 'lib/peek/views/detailed_view.rb'
- 'spec/models/namespace/root_storage_statistics_spec.rb' - 'spec/models/namespace/root_storage_statistics_spec.rb'

View file

@ -1,14 +1,12 @@
--- ---
Database/MultipleDatabases: Database/MultipleDatabases:
Exclude: Exclude:
- ee/lib/ee/gitlab/database.rb
- ee/lib/gitlab/geo/database_tasks.rb - ee/lib/gitlab/geo/database_tasks.rb
- ee/lib/gitlab/geo/geo_tasks.rb - ee/lib/gitlab/geo/geo_tasks.rb
- ee/lib/gitlab/geo/health_check.rb - ee/lib/gitlab/geo/health_check.rb
- ee/lib/gitlab/geo/log_cursor/daemon.rb - ee/lib/gitlab/geo/log_cursor/daemon.rb
- ee/lib/pseudonymizer/dumper.rb - ee/lib/pseudonymizer/dumper.rb
- ee/lib/pseudonymizer/pager.rb - ee/lib/pseudonymizer/pager.rb
- ee/lib/system_check/geo/geo_database_configured_check.rb
- ee/spec/lib/pseudonymizer/dumper_spec.rb - ee/spec/lib/pseudonymizer/dumper_spec.rb
- ee/spec/services/ee/merge_requests/update_service_spec.rb - ee/spec/services/ee/merge_requests/update_service_spec.rb
- lib/backup/database.rb - lib/backup/database.rb
@ -21,16 +19,13 @@ Database/MultipleDatabases:
- lib/gitlab/database/migrations/observers/query_log.rb - lib/gitlab/database/migrations/observers/query_log.rb
- lib/gitlab/database/partitioning_migration_helpers/backfill_partitioned_table.rb - lib/gitlab/database/partitioning_migration_helpers/backfill_partitioned_table.rb
- lib/gitlab/database.rb - lib/gitlab/database.rb
- lib/gitlab/database/schema_cache_with_renamed_table.rb
- lib/gitlab/database/with_lock_retries.rb - lib/gitlab/database/with_lock_retries.rb
- lib/gitlab/gitlab_import/importer.rb - lib/gitlab/gitlab_import/importer.rb
- lib/gitlab/health_checks/db_check.rb - lib/gitlab/health_checks/db_check.rb
- lib/gitlab/import_export/base/relation_factory.rb - lib/gitlab/import_export/base/relation_factory.rb
- lib/gitlab/import_export/group/relation_tree_restorer.rb - lib/gitlab/import_export/group/relation_tree_restorer.rb
- lib/gitlab/legacy_github_import/importer.rb - lib/gitlab/legacy_github_import/importer.rb
- lib/gitlab/metrics/samplers/database_sampler.rb
- lib/gitlab/seeder.rb - lib/gitlab/seeder.rb
- lib/gitlab/sherlock/query.rb
- lib/system_check/orphans/repository_check.rb - lib/system_check/orphans/repository_check.rb
- spec/db/schema_spec.rb - spec/db/schema_spec.rb
- spec/initializers/database_config_spec.rb - spec/initializers/database_config_spec.rb
@ -39,15 +34,8 @@ Database/MultipleDatabases:
- spec/lib/gitlab/database_spec.rb - spec/lib/gitlab/database_spec.rb
- spec/lib/gitlab/metrics/subscribers/active_record_spec.rb - spec/lib/gitlab/metrics/subscribers/active_record_spec.rb
- spec/lib/gitlab/profiler_spec.rb - spec/lib/gitlab/profiler_spec.rb
- spec/lib/gitlab/usage_data_metrics_spec.rb
- spec/lib/gitlab/usage_data_queries_spec.rb
- spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/constraints_spec.rb - spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/constraints_spec.rb
- spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/joins_spec.rb - spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/joins_spec.rb
- spec/lib/gitlab/usage/metrics/instrumentations/database_metric_spec.rb
- spec/lib/gitlab/utils/usage_data_spec.rb
- spec/models/project_feature_usage_spec.rb
- spec/models/users_statistics_spec.rb
- spec/services/users/activity_service_spec.rb
- spec/support/caching.rb - spec/support/caching.rb
- spec/support/gitlab/usage/metrics_instrumentation_shared_examples.rb - spec/support/gitlab/usage/metrics_instrumentation_shared_examples.rb
- spec/support/helpers/database_connection_helpers.rb - spec/support/helpers/database_connection_helpers.rb

View file

@ -2,9 +2,6 @@
Gitlab/DelegatePredicateMethods: Gitlab/DelegatePredicateMethods:
Exclude: Exclude:
- app/models/clusters/cluster.rb - app/models/clusters/cluster.rb
- app/models/concerns/ci/metadatable.rb
- app/models/concerns/integrations/base_data_fields.rb - app/models/concerns/integrations/base_data_fields.rb
- app/models/project.rb - app/models/project.rb
- ee/app/models/concerns/ee/ci/metadatable.rb - ee/app/models/concerns/ee/ci/metadatable.rb
- ee/app/models/license.rb
- lib/gitlab/ci/trace/stream.rb

View file

@ -369,6 +369,7 @@ Gitlab/NamespacedClass:
- app/models/wiki_page.rb - app/models/wiki_page.rb
- app/models/wiki_page/meta.rb - app/models/wiki_page/meta.rb
- app/models/wiki_page/slug.rb - app/models/wiki_page/slug.rb
- app/models/work_item.rb
- app/models/x509_certificate.rb - app/models/x509_certificate.rb
- app/models/x509_commit_signature.rb - app/models/x509_commit_signature.rb
- app/models/x509_issuer.rb - app/models/x509_issuer.rb

View file

@ -1,4 +0,0 @@
---
GraphQL/ArgumentName:
Exclude:
- ee/app/graphql/mutations/audit_events/external_audit_event_destinations/update.rb

View file

@ -5,9 +5,6 @@ GraphQL/FieldDefinitions:
- app/graphql/types/group_type.rb - app/graphql/types/group_type.rb
- app/graphql/types/issue_type.rb - app/graphql/types/issue_type.rb
- app/graphql/types/label_type.rb - app/graphql/types/label_type.rb
- app/graphql/types/project_type.rb
- app/graphql/types/projects/topic_type.rb
- app/graphql/types/release_type.rb
- ee/app/graphql/types/ci/code_quality_degradation_type.rb - ee/app/graphql/types/ci/code_quality_degradation_type.rb
- ee/app/graphql/types/epic_type.rb - ee/app/graphql/types/epic_type.rb
- ee/app/graphql/types/group_release_stats_type.rb - ee/app/graphql/types/group_release_stats_type.rb

View file

@ -6,7 +6,3 @@ GraphQL/FieldMethod:
- app/graphql/types/metrics/dashboards/annotation_type.rb - app/graphql/types/metrics/dashboards/annotation_type.rb
- app/graphql/types/packages/package_details_type.rb - app/graphql/types/packages/package_details_type.rb
- app/graphql/types/project_type.rb - app/graphql/types/project_type.rb
- ee/app/graphql/types/dast/profile_type.rb
- ee/app/graphql/types/dast_site_validation_type.rb
- ee/app/graphql/types/group_release_stats_type.rb
- ee/app/graphql/types/incident_management/oncall_rotation_type.rb

View file

@ -4,9 +4,6 @@ GraphQL/OrderedArguments:
- app/graphql/resolvers/base_issues_resolver.rb - app/graphql/resolvers/base_issues_resolver.rb
- app/graphql/resolvers/design_management/designs_resolver.rb - app/graphql/resolvers/design_management/designs_resolver.rb
- app/graphql/resolvers/design_management/version/design_at_version_resolver.rb - app/graphql/resolvers/design_management/version/design_at_version_resolver.rb
- app/graphql/resolvers/design_management/version/designs_at_version_resolver.rb
- app/graphql/resolvers/design_management/version_in_collection_resolver.rb
- app/graphql/resolvers/group_milestones_resolver.rb
- app/graphql/resolvers/merge_requests_resolver.rb - app/graphql/resolvers/merge_requests_resolver.rb
- app/graphql/resolvers/paginated_tree_resolver.rb - app/graphql/resolvers/paginated_tree_resolver.rb
- app/graphql/resolvers/tree_resolver.rb - app/graphql/resolvers/tree_resolver.rb

View file

@ -7,7 +7,6 @@ Rails/IncludeUrlHelper:
- app/models/integrations/campfire.rb - app/models/integrations/campfire.rb
- app/models/integrations/confluence.rb - app/models/integrations/confluence.rb
- app/models/integrations/custom_issue_tracker.rb - app/models/integrations/custom_issue_tracker.rb
- app/models/integrations/datadog.rb
- app/models/integrations/discord.rb - app/models/integrations/discord.rb
- app/models/integrations/ewm.rb - app/models/integrations/ewm.rb
- app/models/integrations/external_wiki.rb - app/models/integrations/external_wiki.rb

View file

@ -1,24 +1,7 @@
--- ---
Rails/SaveBang: Rails/SaveBang:
Exclude: Exclude:
- ee/spec/initializers/fog_google_https_private_urls_spec.rb
- ee/spec/lib/analytics/merge_request_metrics_calculator_spec.rb - ee/spec/lib/analytics/merge_request_metrics_calculator_spec.rb
- ee/spec/lib/gitlab/auth/ldap/access_spec.rb
- ee/spec/lib/gitlab/auth/o_auth/user_spec.rb
- ee/spec/lib/gitlab/auth/saml/user_spec.rb
- ee/spec/lib/gitlab/elastic/search_results_spec.rb
- ee/spec/lib/gitlab/email/handler/ee/service_desk_handler_spec.rb
- ee/spec/lib/gitlab/geo_spec.rb
- ee/spec/lib/gitlab/git_access_spec.rb
- ee/spec/lib/gitlab/import_export/group/relation_factory_spec.rb
- ee/spec/lib/gitlab/mirror_spec.rb
- ee/spec/models/application_setting_spec.rb
- ee/spec/models/approval_merge_request_rule_spec.rb
- ee/spec/models/approval_project_rule_spec.rb
- ee/spec/models/burndown_spec.rb
- ee/spec/models/elasticsearch_indexed_namespace_spec.rb
- ee/spec/models/gitlab_subscription_spec.rb
- ee/spec/models/issue_spec.rb
- ee/spec/models/protected_environment_spec.rb - ee/spec/models/protected_environment_spec.rb
- ee/spec/models/repository_spec.rb - ee/spec/models/repository_spec.rb
- ee/spec/models/scim_identity_spec.rb - ee/spec/models/scim_identity_spec.rb
@ -28,31 +11,6 @@ Rails/SaveBang:
- ee/spec/models/visible_approvable_spec.rb - ee/spec/models/visible_approvable_spec.rb
- ee/spec/models/vulnerabilities/feedback_spec.rb - ee/spec/models/vulnerabilities/feedback_spec.rb
- ee/spec/models/vulnerabilities/issue_link_spec.rb - ee/spec/models/vulnerabilities/issue_link_spec.rb
- ee/spec/services/ee/merge_requests/update_service_spec.rb
- ee/spec/services/ee/notes/quick_actions_service_spec.rb
- ee/spec/services/ee/notification_service_spec.rb
- ee/spec/services/epic_links/create_service_spec.rb
- ee/spec/services/epics/close_service_spec.rb
- ee/spec/services/epics/issue_promote_service_spec.rb
- ee/spec/services/epics/reopen_service_spec.rb
- ee/spec/services/epics/tree_reorder_service_spec.rb
- ee/spec/services/epics/update_dates_service_spec.rb
- ee/spec/services/epics/update_service_spec.rb
- ee/spec/services/geo/blob_verification_secondary_service_spec.rb
- ee/spec/services/geo/files_expire_service_spec.rb
- ee/spec/services/geo/metrics_update_service_spec.rb
- ee/spec/services/geo/registry_consistency_service_spec.rb
- ee/spec/services/geo/repository_verification_secondary_service_spec.rb
- ee/spec/services/groups/autocomplete_service_spec.rb
- ee/spec/services/ldap_group_reset_service_spec.rb
- ee/spec/services/lfs/unlock_file_service_spec.rb
- ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb
- ee/spec/services/quick_actions/interpret_service_spec.rb
- ee/spec/services/slash_commands/global_slack_handler_spec.rb
- ee/spec/services/start_pull_mirroring_service_spec.rb
- ee/spec/services/status_page/trigger_publish_service_spec.rb
- ee/spec/services/todo_service_spec.rb
- ee/spec/services/vulnerability_feedback/create_service_spec.rb
- spec/lib/backup/manager_spec.rb - spec/lib/backup/manager_spec.rb
- spec/lib/gitlab/alerting/alert_spec.rb - spec/lib/gitlab/alerting/alert_spec.rb
- spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb - spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb
@ -66,11 +24,6 @@ Rails/SaveBang:
- spec/lib/gitlab/database/custom_structure_spec.rb - spec/lib/gitlab/database/custom_structure_spec.rb
- spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb - spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb
- spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb - spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb
- spec/lib/gitlab/gfm/reference_rewriter_spec.rb
- spec/lib/gitlab/git_access_spec.rb
- spec/lib/gitlab/import_export/avatar_saver_spec.rb
- spec/lib/gitlab/import_export/base/relation_factory_spec.rb
- spec/lib/gitlab/import_export/design_repo_restorer_spec.rb
- spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb - spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb
- spec/lib/gitlab/import_export/fork_spec.rb - spec/lib/gitlab/import_export/fork_spec.rb
- spec/lib/gitlab/import_export/group/legacy_tree_saver_spec.rb - spec/lib/gitlab/import_export/group/legacy_tree_saver_spec.rb
@ -90,9 +43,3 @@ Rails/SaveBang:
- spec/lib/gitlab/import_export/snippets_repo_restorer_spec.rb - spec/lib/gitlab/import_export/snippets_repo_restorer_spec.rb
- spec/lib/gitlab/import_export/snippets_repo_saver_spec.rb - spec/lib/gitlab/import_export/snippets_repo_saver_spec.rb
- spec/lib/gitlab/import_export/uploads_manager_spec.rb - spec/lib/gitlab/import_export/uploads_manager_spec.rb
- spec/lib/gitlab/import_export/uploads_saver_spec.rb
- spec/lib/gitlab/import_export/wiki_restorer_spec.rb
- spec/lib/gitlab/lets_encrypt/client_spec.rb
- spec/lib/gitlab/middleware/go_spec.rb
- spec/lib/gitlab/shard_health_cache_spec.rb
- spec/mailers/notify_spec.rb

View file

@ -76,7 +76,6 @@ Rails/TimeZone:
- lib/gitlab/prometheus/queries/additional_metrics_environment_query.rb - lib/gitlab/prometheus/queries/additional_metrics_environment_query.rb
- lib/gitlab/prometheus/queries/matched_metric_query.rb - lib/gitlab/prometheus/queries/matched_metric_query.rb
- lib/gitlab/prometheus_client.rb - lib/gitlab/prometheus_client.rb
- lib/gitlab/sherlock/transaction.rb
- lib/gitlab/task_helpers.rb - lib/gitlab/task_helpers.rb
- lib/gitlab/x509/tag.rb - lib/gitlab/x509/tag.rb
- lib/grafana/time_window.rb - lib/grafana/time_window.rb
@ -141,7 +140,6 @@ Rails/TimeZone:
- spec/lib/gitlab/prometheus/queries/additional_metrics_deployment_query_spec.rb - spec/lib/gitlab/prometheus/queries/additional_metrics_deployment_query_spec.rb
- spec/lib/gitlab/prometheus/queries/deployment_query_spec.rb - spec/lib/gitlab/prometheus/queries/deployment_query_spec.rb
- spec/lib/gitlab/prometheus/queries/validate_query_spec.rb - spec/lib/gitlab/prometheus/queries/validate_query_spec.rb
- spec/lib/gitlab/sherlock/transaction_spec.rb
- spec/lib/gitlab/sidekiq_logging/json_formatter_spec.rb - spec/lib/gitlab/sidekiq_logging/json_formatter_spec.rb
- spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb - spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb
- spec/lib/gitlab/updated_notes_paginator_spec.rb - spec/lib/gitlab/updated_notes_paginator_spec.rb

View file

@ -2,9 +2,6 @@
RSpec/TimecopFreeze: RSpec/TimecopFreeze:
Exclude: Exclude:
- ee/spec/lib/gitlab/analytics/cycle_analytics/data_collector_spec.rb - ee/spec/lib/gitlab/analytics/cycle_analytics/data_collector_spec.rb
- ee/spec/lib/gitlab/geo/git_push_http_spec.rb
- ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb
- ee/spec/lib/gitlab/geo/oauth/login_state_spec.rb
- ee/spec/lib/gitlab/insights/reducers/count_per_period_reducer_spec.rb - ee/spec/lib/gitlab/insights/reducers/count_per_period_reducer_spec.rb
- ee/spec/models/merge_train_spec.rb - ee/spec/models/merge_train_spec.rb
- ee/spec/support/shared_contexts/lib/gitlab/insights/reducers/reducers_shared_contexts.rb - ee/spec/support/shared_contexts/lib/gitlab/insights/reducers/reducers_shared_contexts.rb

View file

@ -13,7 +13,6 @@ Style/OpenStructUse:
- lib/gitlab/testing/request_inspector_middleware.rb - lib/gitlab/testing/request_inspector_middleware.rb
- lib/mattermost/session.rb - lib/mattermost/session.rb
- spec/controllers/groups/clusters_controller_spec.rb - spec/controllers/groups/clusters_controller_spec.rb
- spec/controllers/import/gitlab_controller_spec.rb
- spec/controllers/projects/clusters_controller_spec.rb - spec/controllers/projects/clusters_controller_spec.rb
- spec/factories/go_module_versions.rb - spec/factories/go_module_versions.rb
- spec/factories/wiki_pages.rb - spec/factories/wiki_pages.rb
@ -26,17 +25,13 @@ Style/OpenStructUse:
- spec/graphql/mutations/commits/create_spec.rb - spec/graphql/mutations/commits/create_spec.rb
- spec/helpers/application_settings_helper_spec.rb - spec/helpers/application_settings_helper_spec.rb
- spec/helpers/profiles_helper_spec.rb - spec/helpers/profiles_helper_spec.rb
- spec/initializers/doorkeeper_spec.rb
- spec/lib/gitlab/auth/o_auth/provider_spec.rb - spec/lib/gitlab/auth/o_auth/provider_spec.rb
- spec/lib/gitlab/database/migrations/runner_spec.rb
- spec/lib/gitlab/gitaly_client/blobs_stitcher_spec.rb - spec/lib/gitlab/gitaly_client/blobs_stitcher_spec.rb
- spec/lib/gitlab/gitaly_client/diff_stitcher_spec.rb - spec/lib/gitlab/gitaly_client/diff_stitcher_spec.rb
- spec/lib/gitlab/legacy_github_import/project_creator_spec.rb - spec/lib/gitlab/legacy_github_import/project_creator_spec.rb
- spec/lib/gitlab/quick_actions/command_definition_spec.rb - spec/lib/gitlab/quick_actions/command_definition_spec.rb
- spec/models/design_management/design_action_spec.rb - spec/models/design_management/design_action_spec.rb
- spec/models/design_management/design_at_version_spec.rb - spec/models/design_management/design_at_version_spec.rb
- spec/models/user_spec.rb
- spec/presenters/packages/nuget/search_results_presenter_spec.rb
- spec/services/packages/nuget/metadata_extraction_service_spec.rb - spec/services/packages/nuget/metadata_extraction_service_spec.rb
- spec/services/projects/import_service_spec.rb - spec/services/projects/import_service_spec.rb
- spec/services/system_note_service_spec.rb - spec/services/system_note_service_spec.rb

View file

@ -2,23 +2,492 @@
documentation](doc/development/changelog.md) for instructions on adding your own documentation](doc/development/changelog.md) for instructions on adding your own
entry. entry.
## 14.6.5 (2022-02-25) ## 14.7.4 (2022-02-25)
### Security (8 changes) ### Security (8 changes)
- [Limit commands_changes to certain keys](gitlab-org/security/gitlab@138c437f2819d62ce4750fb84399d8868c844b01) ([merge request](gitlab-org/security/gitlab!2227)) - [Limit commands_changes to certain keys](gitlab-org/security/gitlab@59351be8d1d868e31bc849482b266e4047710eeb) ([merge request](gitlab-org/security/gitlab!2226))
- [Add runners_token prefix to Group and Project](gitlab-org/security/gitlab@682d4e9b63d3d36901638edc75c1b265460d42dc) ([merge request](gitlab-org/security/gitlab!2250)) - [Add runners_token prefix to Group and Project](gitlab-org/security/gitlab@74615b7fd5359c4da7f1a3ca9052685e81e1690f) ([merge request](gitlab-org/security/gitlab!2249))
- [Anonymous user can enumerate all users through GraphQL endpoint](gitlab-org/security/gitlab@2b00a8036b291d3ad5de551a5e13c2a0a39d0234) ([merge request](gitlab-org/security/gitlab!2102)) - [Anonymous user can enumerate all users through GraphQL endpoint](gitlab-org/security/gitlab@e213dfc546020d3f88b40cdfc0f877138b0aaef5) ([merge request](gitlab-org/security/gitlab!2119))
- [Check for unsafe characters in email addresses before sending](gitlab-org/security/gitlab@6bc653b3dadefb3d2c80823786d43e6b7f8c4620) ([merge request](gitlab-org/security/gitlab!2208)) - [Check for unsafe characters in email addresses before sending](gitlab-org/security/gitlab@395385ffccfd9d25063531ea955b179d9bc4f0c5) ([merge request](gitlab-org/security/gitlab!2207))
- [Warn when snippet contains unretrievable files](gitlab-org/security/gitlab@f9ae9515ec98ab934f4aa3a35af0aca806bbe21d) ([merge request](gitlab-org/security/gitlab!2203)) - [Warn when snippet contains unretrievable files](gitlab-org/security/gitlab@dc4b3c00284e17bcbf20ec2ae1ee7e8a7efae9b2) ([merge request](gitlab-org/security/gitlab!2204))
- [Prevent DOS when rendering math markdown](gitlab-org/security/gitlab@fd6d496df6f4b5eb3da0b851f9ff8ebb1d68d3f2) ([merge request](gitlab-org/security/gitlab!2201)) - [Prevent DOS when rendering math markdown](gitlab-org/security/gitlab@f01674f210dee4c803b4850292d16412463b18e3) ([merge request](gitlab-org/security/gitlab!2200))
- [Check permission when creating members through service](gitlab-org/security/gitlab@948e5103285de2a6cdb5152ff2c13ae4db2f4cda) ([merge request](gitlab-org/security/gitlab!2211)) - [Check permission when creating members through service](gitlab-org/security/gitlab@4f9b302511ddfaf07af8d08d848252e0c64ff307) ([merge request](gitlab-org/security/gitlab!2210))
- [Reset password field on page load](gitlab-org/security/gitlab@1417b463f2771a4b17e068dea9de3aa6c4540962) ([merge request](gitlab-org/security/gitlab!2194)) - [Reset password field on page load](gitlab-org/security/gitlab@1a6541462e1ddd58ea9a172fbd3c0b9026760784) ([merge request](gitlab-org/security/gitlab!2193))
## 14.6.4 (2022-02-03) ## 14.7.3 (2022-02-15)
### Fixed (2 changes)
- [Update GitHub PRs Importer to force update repository](gitlab-org/gitlab@33f12736b070362cb89e9bbb4b3aa7d86fc373c3) ([merge request](gitlab-org/gitlab!80595))
- [Fix Geo checksummable check failing when file is nil](gitlab-org/gitlab@f49e3ea3e4d4ca7a64607687f9aaa974801b6bf9) ([merge request](gitlab-org/gitlab!80595)) **GitLab Enterprise Edition**
### Changed (1 change)
- [Properly exclude pending_destruction packages when creating one](gitlab-org/gitlab@9fb9f1ca8a2342225b7017c211f85175a4ef56dd) ([merge request](gitlab-org/gitlab!80595))
## 14.7.2 (2022-02-08)
### Added (1 change)
- [Allow self-hosted instances to render same-origin Iframe](gitlab-org/gitlab@eb7c78363cdfc670286967872d8458fc5f6d82e8) ([merge request](gitlab-org/gitlab!79966))
### Fixed (4 changes)
- [Geo: Fix reverify object stored files](gitlab-org/gitlab@603700dcca3b8f25a3b80b44b11a73df549c0cb3) ([merge request](gitlab-org/gitlab!79966)) **GitLab Enterprise Edition**
- [Geo: Fix verification failures of remote stored files](gitlab-org/gitlab@2eb8ac7e88dcd40f0e8266966655962e4d6e3171) ([merge request](gitlab-org/gitlab!79966)) **GitLab Enterprise Edition**
- [GitLab Version - CE Admin Dashboard [RUN ALL RSPEC] [RUN AS-IF-FOSS]](gitlab-org/gitlab@f2253ce2d729fa202a26b54f3ca870b932ea1855) ([merge request](gitlab-org/gitlab!79966))
- [Fix cluster integration HTTP adapter](gitlab-org/gitlab@c05027ef4d7ec35fc16e8e16dc6e5af201f665c3) ([merge request](gitlab-org/gitlab!79966))
### Changed (1 change)
- [Update to ruby-magic v0.5.4](gitlab-org/gitlab@ced6ef1001730dc2851f58f7db3229d1c585b9d3) ([merge request](gitlab-org/gitlab!79966))
### Removed (1 change)
- [Disable sandboxed_mermaid feature flag by default](gitlab-org/gitlab@70c40d43169bd48d360ed7a6a03c33c05d5e3738) ([merge request](gitlab-org/gitlab!79966))
## 14.7.1 (2022-02-03)
No changes. No changes.
## 14.7.0 (2022-01-21)
### Added (84 changes)
- [Add verification before namespace creation](gitlab-org/gitlab@62c6ea0ff38f4a90ede4d5200e78206cdb71d29b) ([merge request](gitlab-org/gitlab!77315))
- [Add GraphQL mutation to destroy timeline events](gitlab-org/gitlab@71a1be80522bd01d3434dde6a5bb009454e65839) ([merge request](gitlab-org/gitlab!78192)) **GitLab Enterprise Edition**
- [ApplicationSetting: Add runner_token_expiration_interval field](gitlab-org/gitlab@d62621aa82714995cfe84c056773b291775b77bc) by @KyleFromKitware ([merge request](gitlab-org/gitlab!77884))
- [Rate limit Gitlab Shell operations](gitlab-org/gitlab@ddda5851babbad2f89b7ba37b0437b87e55950e5) ([merge request](gitlab-org/gitlab!78373))
- [Add `Delete` button to label edit view](gitlab-org/gitlab@07fa8e097bfc1143cfe362a0a4f2031d4792b73b) ([merge request](gitlab-org/gitlab!77917))
- [Enable autocomplete on cadence iteration create/edit pages](gitlab-org/gitlab@f0f99fc37266ebffb82134419bde8346ca799091) by @espadav8 ([merge request](gitlab-org/gitlab!78272)) **GitLab Enterprise Edition**
- [Extend GraphQL API interface with `securityTrainingProviders` field](gitlab-org/gitlab@d182af0c80834ddfc6f5db0587202f013351a42e) ([merge request](gitlab-org/gitlab!78195)) **GitLab Enterprise Edition**
- [Hierarchy page to show work items](gitlab-org/gitlab@a88b585c3b8cc4fd4fd11229e175ed4e24dead13) ([merge request](gitlab-org/gitlab!76720))
- [Add group level access token UI](gitlab-org/gitlab@a1a5cb34efe5218b562c69e621fc586625b3ed0a) by @fh1ch ([merge request](gitlab-org/gitlab!77449))
- [Remove ci_archived_build_trace_checksum feature flag](gitlab-org/gitlab@fbdec367917ae9f8ec4577f6de6ecd292755d5d0) ([merge request](gitlab-org/gitlab!78368))
- [Add scan result policies into the policy](gitlab-org/gitlab@71e49518d368fa7ab6a20a7ce295b5025923179f) ([merge request](gitlab-org/gitlab!77810)) **GitLab Enterprise Edition**
- [Enable logging when recursive webhook detected](gitlab-org/gitlab@2c9dc9a4b3d8b9f510369277f9d9fb12c319ee57) ([merge request](gitlab-org/gitlab!78343))
- [Enable sandboxed_mermaid feature flag](gitlab-org/gitlab@da35abbc144db7737f0633cc7c3b4121e7db1ad5) ([merge request](gitlab-org/gitlab!78283))
- [Feat(SM Subscription History): trim table size](gitlab-org/gitlab@1f43ddd699ee4934878f99d9741dc3ccbeb48e1a) ([merge request](gitlab-org/gitlab!78183)) **GitLab Enterprise Edition**
- [Add subsidized cost factor for Open Source plan](gitlab-org/gitlab@f71cc9528fb35bf963845913c67cf1ad69e144e9) ([merge request](gitlab-org/gitlab!77882)) **GitLab Enterprise Edition**
- [Remove expired agent activity events as new events are created](gitlab-org/gitlab@8aa9f25450d99139cc806cc985422a1ae0808b50) ([merge request](gitlab-org/gitlab!75709))
- [Add docs for pages domain rate-limits](gitlab-org/gitlab@12555484fbbe1687188644806e2c0880859f1977) ([merge request](gitlab-org/gitlab!77969))
- [Add a temporary index for Member.state](gitlab-org/gitlab@4a0852c64aee2312a4475db720d9acb04beeb075) ([merge request](gitlab-org/gitlab!77298))
- [Adding Secure Files data model and file uploader](gitlab-org/gitlab@92da2973e1cfc22b988ec4a24a5e36da6e1ff426) ([merge request](gitlab-org/gitlab!77886))
- [Expose internal_url setting for Geo secondaries](gitlab-org/gitlab@0af8fa9eba99528d17cbadc3a811575fea862897) ([merge request](gitlab-org/gitlab!77179)) **GitLab Enterprise Edition**
- [Add the `draft` argument to GraphQL MergeRequestsResolver](gitlab-org/gitlab@701214248ec36e6b79c4db3cd78cd315ba62e7f2) ([merge request](gitlab-org/gitlab!78181))
- [Send a rejection email if incoming emails are too large](gitlab-org/gitlab@d9e1fb2be07af9f43f8cda7ceca2f362586830f1) ([merge request](gitlab-org/gitlab!77638))
- [Clean up escalations after changing incident proj](gitlab-org/gitlab@75943f4afd57a030e8c3667d47a938d9d3bf02c1) ([merge request](gitlab-org/gitlab!77086)) **GitLab Enterprise Edition**
- [Support default templates for issues/MRs via .gitlab/ folders](gitlab-org/gitlab@9cdca50399671316824442cbb00f3c27f4a82a13) by @davebarr ([merge request](gitlab-org/gitlab!76326))
- [Add link to the self-managed trial flow from SaaS trial signup](gitlab-org/gitlab@c68e39aab18b6d373369b1b4fce5d9f99b1c2fae) ([merge request](gitlab-org/gitlab!76476)) **GitLab Enterprise Edition**
- [feat: Bump Code-Quality image to 0.85.26](gitlab-org/gitlab@fb862e4f77f377e269a15d6bdbbd3b1b2f0fe22f) ([merge request](gitlab-org/gitlab!78125))
- [Allow issue contacts from parent groups](gitlab-org/gitlab@380cc55a36a2e0e738f8c58e03f18b344712d99b) by @leetickett ([merge request](gitlab-org/gitlab!77352))
- [Allow to wrap inline code in other marks](gitlab-org/gitlab@e3b9f1ab6a7002c5d7ed1b4917b7a3e5aa54d016) ([merge request](gitlab-org/gitlab!78081))
- [Registration features info for ip restriction](gitlab-org/gitlab@70dad3a46c4e7a8aa052014b1972ebe1d6feaa32) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74022)) **GitLab Enterprise Edition**
- [Add approve button on pending members table](gitlab-org/gitlab@844577de50d75d35eaad3950ea972f677d721889) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/75756)) **GitLab Enterprise Edition**
- [Upgrade GitLab Pages to 1.51.0](gitlab-org/gitlab@fe8eab56e1af1cb531b80bdd9418b80aab045387) ([merge request](gitlab-org/gitlab!78066))
- [Indicate locked users in Admin Area](gitlab-org/gitlab@ecb69f22f0bcf9e45638441edc8a096060138179) ([merge request](gitlab-org/gitlab!77729))
- [Include the project name VSA stage records](gitlab-org/gitlab@2277b12463d6ba32a68737f396a001842e530f07) ([merge request](gitlab-org/gitlab!77841)) **GitLab Enterprise Edition**
- [Accept maintainer_note in REST runner registration](gitlab-org/gitlab@574e6f6e2ee3d80b89a09abb7346b60e94e06269) ([merge request](gitlab-org/gitlab!77779))
- [Enforce unique contact email for group hierarchy](gitlab-org/gitlab@6895e1ad1ec27efebd0750d0351917ebbba38c6f) by @leetickett ([merge request](gitlab-org/gitlab!77830))
- [Add maintainer_note field to CI runners table](gitlab-org/gitlab@0ecabcff56b140cd7a9211500d44072d2c020f8c) ([merge request](gitlab-org/gitlab!77767))
- [GitLab Version - Help Dropdown Version](gitlab-org/gitlab@a12657ea63d161613d2b1ce88cb01029d196f9e5) ([merge request](gitlab-org/gitlab!74830))
- [Add support for backing up Packages](gitlab-org/gitlab@7d89a2283e629ddad1695189774f66d2c1e4d8d4) ([merge request](gitlab-org/gitlab!77532))
- [Allow to configure log level of Gitlab:Logger (by env variable)](gitlab-org/gitlab@f5718975c73f2469eb437d7f0e40c7b9ab3c0cdb) by @wwwjon ([merge request](gitlab-org/gitlab!77667))
- [REST API: add field merge_user to MR response](gitlab-org/gitlab@5246e6c9ebd5d717ddc1c48bcba39e754656bf34) by @trakos ([merge request](gitlab-org/gitlab!77658))
- [Add index for selecting active agent tokens](gitlab-org/gitlab@732ecd9ce4ad55e6149f62501acd51c70b168508) ([merge request](gitlab-org/gitlab!77923))
- [Add vulnerabilityFindingDismiss GraphQL mutation](gitlab-org/gitlab@3a3e04be0d988de3d0742eae81cb34de25be3b9c) ([merge request](gitlab-org/gitlab!77372)) **GitLab Enterprise Edition**
- [Enable filtering agent tokens by status](gitlab-org/gitlab@caab657574087d94a02a6e8fca482e6683f8acfe) ([merge request](gitlab-org/gitlab!77735))
- [Add customer relations group setting](gitlab-org/gitlab@3ecdc804ab926194bf7b6687ce6e850480b400e5) by @leetickett ([merge request](gitlab-org/gitlab!77386))
- [Add namespace_id reference to routes](gitlab-org/gitlab@b8eb9f1daf0f17f9f4b1a7024f7b8a471937892e) ([merge request](gitlab-org/gitlab!77571))
- [Add scan result policy into policy list](gitlab-org/gitlab@f8846f093036b1e44f406f0817455563341b8e20) ([merge request](gitlab-org/gitlab!77778)) **GitLab Enterprise Edition**
- [Add package managers api paths to details type](gitlab-org/gitlab@d00938625158efc2dbc15228962787ab1fa82eef) ([merge request](gitlab-org/gitlab!77518))
- [Adds API feature configuring default mr target](gitlab-org/gitlab@1e3a3ddfc408d43de1ce018525912c6f19953581) ([merge request](gitlab-org/gitlab!77169))
- [Enable autocomplete features on iteration forms](gitlab-org/gitlab@bcb5110c0a49760cf4fbc03f0e13f80c2cd28ff3) by @espadav8 ([merge request](gitlab-org/gitlab!77511)) **GitLab Enterprise Edition**
- [Add editAdminUrl to Runner GraphQL API](gitlab-org/gitlab@62dd4d2257bf3322d06fb3e45223dca94468ab1a) ([merge request](gitlab-org/gitlab!77748))
- [Expose iteration ordinal number via APIs](gitlab-org/gitlab@e558ef90dcbed60c0e234f2ec3a8733a0fc040e8) ([merge request](gitlab-org/gitlab!77650)) **GitLab Enterprise Edition**
- [Add enable and disable advanced search rake tasks](gitlab-org/gitlab@4de079337744c963657174e43fd72dbfe42a638b) ([merge request](gitlab-org/gitlab!75946)) **GitLab Enterprise Edition**
- [Allow to hide personalization questions on New Group page](gitlab-org/gitlab@f64750a2ce222c7f0199408a6f5d53a1d6bff36e) by @wwwjon ([merge request](gitlab-org/gitlab!76920))
- [Registration features info for sending emails](gitlab-org/gitlab@657c11fec93bb29b8e3bd28f8b9c9330f1498a43) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74042)) **GitLab Enterprise Edition**
- [Add Group Access Token API endpoints](gitlab-org/gitlab@de7db9d75eecc16266f9331fa99aa7ab8cdf2e1e) by @fh1ch ([merge request](gitlab-org/gitlab!77236))
- [GraphQL: Add count property to RunnerTypes connection](gitlab-org/gitlab@fcaa5681819bc800acc0e1ae751420e6e994c193) ([merge request](gitlab-org/gitlab!77578))
- [Add GraphQL mutation to revoke an agent token](gitlab-org/gitlab@43d8a69cfbdd26e55a61d13fada73d9012a77242) ([merge request](gitlab-org/gitlab!77635))
- [Schedule recalculating UUID for all `Vulnerabilities::Finding` records](gitlab-org/gitlab@88326bacf0d0dd14c04aed23f0506cf6ff51d45b) ([merge request](gitlab-org/gitlab!75546))
- [Add migration to enqueue background worker](gitlab-org/gitlab@853e639114a473a00338f5b42c0085fbee8e91a9) ([merge request](gitlab-org/gitlab!76714))
- [Add createdAt to Runner GraphQL API](gitlab-org/gitlab@f91730711cf4c452b90863fadd3dd4fcbedc7093) ([merge request](gitlab-org/gitlab!77561))
- [Add search and sorting to tags](gitlab-org/gitlab@ee4c64d2c469291e3b51a88e20bc658c58f52004) ([merge request](gitlab-org/gitlab!76759))
- [Update gitlab-omniauth-openid-connect gem to support ECSDA keys](gitlab-org/gitlab@1c8377c8cf95ec518561a65323766856d1f76d81) ([merge request](gitlab-org/gitlab!77491))
- [Remove dependency proxy feature flag](gitlab-org/gitlab@5237844f3fcfc918376d20012a703ed1a2525b4a) ([merge request](gitlab-org/gitlab!77477))
- [Upgrade GitLab Pages to 1.50.0](gitlab-org/gitlab@7bae98c9590cd2ad1b17e5a1abd4737320632ada) ([merge request](gitlab-org/gitlab!77405))
- [Add HTTP status to LFS push client error messages](gitlab-org/gitlab@4e1acedbfd28b3adf9c0a0569843e80f2d5d6ef8) ([merge request](gitlab-org/gitlab!77334))
- [Add group crm settings](gitlab-org/gitlab@083c1f8f6eb4accca6b6707a32866a59260504c6) by @leetickett ([merge request](gitlab-org/gitlab!76983))
- [Add co_authored_by to merge commit templates](gitlab-org/gitlab@143e577c77c56339473561ddeeb0e0c75073f8ff) by @trakos ([merge request](gitlab-org/gitlab!76042))
- [Allow filtering epics by author_username and not[author_username]](gitlab-org/gitlab@5d759493f94eafb3361ab1080d31beeff6203375) by @espadav8 ([merge request](gitlab-org/gitlab!77151)) **GitLab Enterprise Edition**
- [Add `ref_path` to PipelineType](gitlab-org/gitlab@f1cb789d3d0267455a7242f6a8de63688f65eb26) by @genctys ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/72591))
- [Allow LDAP failover](gitlab-org/gitlab@3a900c1b39be153b37be3db8e60bcfb8de51513b) by @sathieu ([merge request](gitlab-org/gitlab!77000))
- [Add Backup and Restore tasks for Terraform States](gitlab-org/gitlab@58a8d4f80b24f2e6dc6d99a2675ea220310d044b) ([merge request](gitlab-org/gitlab!63347))
- [Handle syncing alert escalation status to incident](gitlab-org/gitlab@badcfcd2aa91748bf67adfcfd22b316199723e91) ([merge request](gitlab-org/gitlab!75706))
- [Added possibility to remove agent from UI](gitlab-org/gitlab@6b5b5e8f5879e896efcb76a8eb9fff16282f4881) ([merge request](gitlab-org/gitlab!77199))
- [Add "Scan library" tab](gitlab-org/gitlab@d3ca75aacca08c7651b0c0b8bd49a3253aac8e51) ([merge request](gitlab-org/gitlab!77107)) **GitLab Enterprise Edition**
- [Enable github_importer_use_diff_note_with_suggestions by default](gitlab-org/gitlab@eaab50eb575d73513ac2f2eef4f85adbbccb0043) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74096))
- [Rename projects set for delayed deletion](gitlab-org/gitlab@268d41a518a7021f75881e46290e533ac85ab3df) ([merge request](gitlab-org/gitlab!76675))
- [Add unique userid count for Geo proxied requests](gitlab-org/gitlab@27ae10f38bbeffa53d729881b854f63402e86d82) ([merge request](gitlab-org/gitlab!76587)) **GitLab Enterprise Edition**
- [Add rate limiting for user email lookup](gitlab-org/gitlab@fe9363276e8e6027c851b83ec6bf13ec6a412878) ([merge request](gitlab-org/gitlab!76760))
- [Export Project LFS Objects as part of GitLab Migration](gitlab-org/gitlab@7867db2c22fb9c9850e1dcb49f26fa2b89a665c6) ([merge request](gitlab-org/gitlab!77018))
- [Add GraphQL query to retrieve timeline events](gitlab-org/gitlab@e18bf545fa62c1e15977bed1f55c94de88285932) ([merge request](gitlab-org/gitlab!76232)) **GitLab Enterprise Edition**
- [Limit Sidekiq push_bulk to a maximum of 1000 jobs in one go by default](gitlab-org/gitlab@8e2664ed46c4d172024a1c52673fc6ea3a1be667) ([merge request](gitlab-org/gitlab!77088))
- [Add revoked status to cluster agent tokens](gitlab-org/gitlab@283842444a31d6ebab0ae22559e6e71dd918e691) ([merge request](gitlab-org/gitlab!76505))
- [Allow passing in an epic parent_id when updating epics](gitlab-org/gitlab@d71076d540cd7a888ffbdc34748c493d229c4f5e) by @espadav8 ([merge request](gitlab-org/gitlab!76510)) **GitLab Enterprise Edition**
- [Add database.flavor to usage data](gitlab-org/gitlab@9179c6fc3d589d2a042d3716b3577bb0b1644989) ([merge request](gitlab-org/gitlab!75587))
### Fixed (98 changes)
- [Fix copying/pasting images in the Content Editor](gitlab-org/gitlab@0cbc98ec5e900b1e5cd9bc70330038b6bd1facb8) ([merge request](gitlab-org/gitlab!78295))
- [Fix security dashboard showing wrong count for more than 100 projects](gitlab-org/gitlab@bdceb76ca0d67b8aeb3d60ceddd9f546f15880b9) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78074)) **GitLab Enterprise Edition**
- [Fix default emaildomain when creating RAT users](gitlab-org/gitlab@b8f08407b9b3551e9a6f2e194cc68d4621b16f53) by @cruelsmith ([merge request](gitlab-org/gitlab!74506))
- [Show blocked status label in deployments view](gitlab-org/gitlab@95fc512756749b80d46863975b98e9ba8c081bf1) ([merge request](gitlab-org/gitlab!78234)) **GitLab Enterprise Edition**
- [Dependency proxy settings are built on access](gitlab-org/gitlab@b45f64264ef2d86a9461bce01f329515c06a4cf8) ([merge request](gitlab-org/gitlab!77553))
- [Allow git protocol to be used for repository imports](gitlab-org/gitlab@0f5eade690d7b5f744ea19a5a4e84bb126e4b60e) ([merge request](gitlab-org/gitlab!78479))
- [Show "Issues" menu when Jira issues is enabled](gitlab-org/gitlab@807e746aeb02406309e9dc40afca0d5f4b4c7428) ([merge request](gitlab-org/gitlab!78467)) **GitLab Enterprise Edition**
- [Order child epics in roadmap by configured sort order](gitlab-org/gitlab@53a095bf9d319b69d95517895495d84f0801b0dc) by @espadav8 ([merge request](gitlab-org/gitlab!78249)) **GitLab Enterprise Edition**
- [Fix disabled style for mirror settings field](gitlab-org/gitlab@105e3ac6aa244fd202d846fed19b30cdde07360d) ([merge request](gitlab-org/gitlab!78399))
- [Destroy trace chunks and data when deleting pipelines](gitlab-org/gitlab@70987ae1fad949e03f9812a2baa5635c64d0dd23) ([merge request](gitlab-org/gitlab!78116))
- [Fix authorized_groups to include sub groups as well](gitlab-org/gitlab@2273ebc4d6defa6b76be38bf4fd026926d5e0704) by @wwwjon ([merge request](gitlab-org/gitlab!76556))
- [Fix margin for submit button with captcha](gitlab-org/gitlab@b6b3509f1bb98adeaa4a24bc40faa8e8e8799176) ([merge request](gitlab-org/gitlab!78316))
- [Migrate Epics tabs to Vue](gitlab-org/gitlab@186fe2573fc3b97481a234764f238ca782184792) ([merge request](gitlab-org/gitlab!77653)) **GitLab Enterprise Edition**
- [Fix N+1 issue when associating DAST profiles and CI Builds](gitlab-org/gitlab@1136d945411c12e328d96faf9d019167c629e086) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/75448)) **GitLab Enterprise Edition**
- [Geo: Fix undefined separate_verification_state_table?](gitlab-org/gitlab@17bb757f0b2781606194e3c504ea9fd468981c0b) ([merge request](gitlab-org/gitlab!78293)) **GitLab Enterprise Edition**
- [Error Tracking: Fix collecting errors for golang](gitlab-org/gitlab@e0d5bee3b05bf7c90dbc36c788a77924006939d0) by @bastianccm ([merge request](gitlab-org/gitlab!78199))
- [Notify admins 15 days prior to license expiration](gitlab-org/gitlab@c58f99d5aaa7f70b1d727d9c4591dbe030867bdb) ([merge request](gitlab-org/gitlab!78000)) **GitLab Enterprise Edition**
- [Fix auditor user able to bulk select vulns on vulnerability report](gitlab-org/gitlab@0d18a578bc1fcd8ea7cec17ac2e5eeae8bd6df46) ([merge request](gitlab-org/gitlab!78241)) **GitLab Enterprise Edition**
- [Fix autoscroll to comments on issues](gitlab-org/gitlab@2884857277ce2b6c1c01635f04022117258f9ac1) ([merge request](gitlab-org/gitlab!76340))
- [Strip + reference format from HTML links](gitlab-org/gitlab@4a9a163cfe57669a96cf7f52babe5296817f81ce) ([merge request](gitlab-org/gitlab!78229))
- [Allow developers to fork into group](gitlab-org/gitlab@ddcf166129acb5aee41547d2f6edd5596b7a49b2) ([merge request](gitlab-org/gitlab!78204))
- [Use normal font weight and border for 'Subscribe' buttons](gitlab-org/gitlab@dc35d3c742b89c7e15648b3de05e81bad0158483) by @KevSlashNull ([merge request](gitlab-org/gitlab!75961))
- [Improve visibility radio option text on new project page](gitlab-org/gitlab@bce954ea1ed798fd0cac0a9ff6660a94f53ca34c) ([merge request](gitlab-org/gitlab!78083))
- [Fix schema registration in the pipeline editor](gitlab-org/gitlab@8710212ee7ade8321f0c3cdc2cb4615cad365017) ([merge request](gitlab-org/gitlab!77743))
- [Boards - Fix weight assigned to wrong card](gitlab-org/gitlab@fe2abc0bc79a20c2017ff082b3ad220be2f6b222) ([merge request](gitlab-org/gitlab!78161)) **GitLab Enterprise Edition**
- [Remove unnecessary CSS in VSA](gitlab-org/gitlab@2e80c7955adfa1c05ad5bf56c32e169642312f67) ([merge request](gitlab-org/gitlab!78175))
- [Fix shift after VSA path load](gitlab-org/gitlab@51961b486dae6db5d09b0c958b96d3ef4a2eef8d) ([merge request](gitlab-org/gitlab!77960))
- [Fix Incident sidebar on issue boards](gitlab-org/gitlab@743ee5d690df326d441702aaa06041ca5e38505b) ([merge request](gitlab-org/gitlab!78021))
- [Always autofill group slug](gitlab-org/gitlab@f4c35074e597fb95738fdc7977f20665062bf01f) ([merge request](gitlab-org/gitlab!78152))
- [Update excon to v0.90.0](gitlab-org/gitlab@4efa0b3feee70cd1f1b95e100fbdd858a674d7d2) ([merge request](gitlab-org/gitlab!78147))
- [Format issue list counts](gitlab-org/gitlab@2a359443494573caf5fab88a72df45d504fc5a56) ([merge request](gitlab-org/gitlab!77986))
- [Ignore multiple <code> when syntax highlighting](gitlab-org/gitlab@7a6fb02d8c4c6a9755dcc849913813b9c57cf35c) ([merge request](gitlab-org/gitlab!77796))
- [Waive credit card validation if project has paid CI/CD minutes](gitlab-org/gitlab@7c2e0e1bf79c63bb1436ed2cb1aa1c97baf9441b) ([merge request](gitlab-org/gitlab!77829)) **GitLab Enterprise Edition**
- [Fix toggle code block button in Content Editor](gitlab-org/gitlab@766da0c228f5b1bf6dae79c45fa67fbb5844e260) ([merge request](gitlab-org/gitlab!78071))
- [Use the same email validation for User and Email](gitlab-org/gitlab@866a5fa0f6ba9c71d728a8c7b4f7007d9fa9d755) ([merge request](gitlab-org/gitlab!77785))
- [Expose new monthIso8601 GraphQL option to fix CI minutes usage sorting](gitlab-org/gitlab@43cd0bbd9ec6e59ae7bad449dd21ee10a67f0267) by @davebarr ([merge request](gitlab-org/gitlab!78006))
- [Improve ReadTotalTimeout to start with reading](gitlab-org/gitlab@7448b7927973ba17af2d5a5121b2f5b221eb4405) ([merge request](gitlab-org/gitlab!77879))
- [Update excon gem to v0.89.0](gitlab-org/gitlab@af75482f39e73d3670d82f4dd7050bd6bd46a4ab) ([merge request](gitlab-org/gitlab!78007))
- [Fix infinite loop in Content Editor codeblocks](gitlab-org/gitlab@2fe3c8849ba12a03608de211b3cf3d5eb334f8e4) ([merge request](gitlab-org/gitlab!77965))
- [Only show owners & admins CI minutes purchase notifications](gitlab-org/gitlab@723c7229d3e927b6552bdd84b8cbcd120fb3a24a) ([merge request](gitlab-org/gitlab!77118)) **GitLab Enterprise Edition**
- [Restric access to crm to reporter+](gitlab-org/gitlab@e495d6a5c83c7e9e194d425e5558385749cae73e) by @leetickett ([merge request](gitlab-org/gitlab!77825))
- [Fix destruction of projects with pipelines](gitlab-org/gitlab@1cbf0709c5df11aa273350054ad276edf50e16fb) ([merge request](gitlab-org/gitlab!77941))
- [Fix invalid raw_metadata being persisted](gitlab-org/gitlab@14835eb9bfda4c1a107f20c0c7f6594a89a3fa16) ([merge request](gitlab-org/gitlab!76151))
- [Disable copy-code button for mermaid diagrams](gitlab-org/gitlab@ca5833e1c8adeda25c9a2e5ea64349307bef3c84) ([merge request](gitlab-org/gitlab!77935))
- [Return 401 when using invalid tokens in oauth/token/info](gitlab-org/gitlab@3e0738ce3ae3d4b19d728f3cc719857b5f7c88ce) ([merge request](gitlab-org/gitlab!77644))
- [Fix the text on Kubenetes Agent modal](gitlab-org/gitlab@60d29a672dceb8a41e13f2754339aef3dccacff0) ([merge request](gitlab-org/gitlab!77933))
- [Add patch for WikiCloth Lua vulnerability](gitlab-org/gitlab@6c03aad1d81c574b695b207eb4335d6905f24ba5) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/76174))
- [Notify admins 15 days prior to license expiration](gitlab-org/gitlab@b07a83f73772ff9abdbd44153c4203a117661d0e) ([merge request](gitlab-org/gitlab!77608)) **GitLab Enterprise Edition**
- [Fix image comment note submission](gitlab-org/gitlab@a2e81cec76c72053f676dcea082a7b75b3f2037e) ([merge request](gitlab-org/gitlab!77864))
- [Fix last update time for project in group page](gitlab-org/gitlab@a290c395c7af5012052045136a95bfde8de45dce) by @orozot ([merge request](gitlab-org/gitlab!77356))
- [Fix missing autosave support in Epic create form](gitlab-org/gitlab@3c479a42896e4b9390232c8d5b0bce6635dc9e89) ([merge request](gitlab-org/gitlab!77859)) **GitLab Enterprise Edition**
- [Remove menu when is not possible to delete](gitlab-org/gitlab@3d10359ebe5e2c9f32ce51e27239ba5a9d0593a8) ([merge request](gitlab-org/gitlab!77692))
- [Correctly pass instance in EDITOR_READY_EVENT](gitlab-org/gitlab@6be7d6bee5a2d1ad70a9d04013f5fdc3746f62a9) ([merge request](gitlab-org/gitlab!77852))
- [Merge/squash commit templates: avoid breaking Git trailers](gitlab-org/gitlab@77922683758f9772d4b88f53a9e9cabf38267944) by @trakos ([merge request](gitlab-org/gitlab!77758))
- [Prevent design discussions without login](gitlab-org/gitlab@73a6999553598919ea2db32bb3266e56cea03852) ([merge request](gitlab-org/gitlab!77563))
- [Remove cluster image scanning dropdown item from scanner filter](gitlab-org/gitlab@343443b4abb7102549c67b498d96163eacfe2250) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/77738)) **GitLab Enterprise Edition**
- [Fix hook log path for service hooks](gitlab-org/gitlab@b9141ad9c798d0e4219c922d5f2ee0ec8735661e) ([merge request](gitlab-org/gitlab!77741))
- [Fix pipeline schedule resets to UTC on edit](gitlab-org/gitlab@d5298c293fc60a14ce431b63a13493025be2814f) by @JonstonChan ([merge request](gitlab-org/gitlab!77723))
- [Use correct namespace method](gitlab-org/gitlab@375ee7ac45a4e9f554339752e6ec207e2b662787) ([merge request](gitlab-org/gitlab!77678))
- [Re-add EachBatch include for failed_verification_timeouts](gitlab-org/gitlab@6285caf988103d29883e55fbc1b3d34c6699cd0f) ([merge request](gitlab-org/gitlab!77676)) **GitLab Enterprise Edition**
- [Fix Sidekiq reporting to Sentry outside of job contexts](gitlab-org/gitlab@4ee15af663a4277e43cd53798168edfac7367428) ([merge request](gitlab-org/gitlab!77659))
- [Fix sticky filters not working on vulnerability report](gitlab-org/gitlab@d57da00d0771100f1b7a278715882088fadc24ec) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/77647)) **GitLab Enterprise Edition**
- [Fix Kubernetes Agent Link on Project page](gitlab-org/gitlab@eff9a85753bfc0d6d4ed5316d65c2d49bf17cc2b) ([merge request](gitlab-org/gitlab!77645))
- [Externalize strings for translation in todos](gitlab-org/gitlab@224f2ead1c3592dd7372de94e05d5d0d65342dbc) ([merge request](gitlab-org/gitlab!77402))
- [Update Rails to v6.1.4.4](gitlab-org/gitlab@a091fd5e95b7033453c236d7f8e188cebd8b94ff) ([merge request](gitlab-org/gitlab!77630))
- [Fix input group text border color](gitlab-org/gitlab@4ba08fe6ad7bc85e760fc0b6c9fcb7bac898c19a) ([merge request](gitlab-org/gitlab!77607))
- [Match address of host when checking whether to login](gitlab-org/gitlab@d8d066def6db36708a6373ec1640ef4401c66647) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/73492)) **GitLab Enterprise Edition**
- [Improve LFS client performance and fix compatibility with Azure DevOps](gitlab-org/gitlab@6e532b4d22abcac66b54993ab27fc791db13e40f) ([merge request](gitlab-org/gitlab!77326))
- [Do not fail report ingestion if there is an invalid finding](gitlab-org/gitlab@c752c229fc0bb68fdf0503301c192ffd364aca3a) ([merge request](gitlab-org/gitlab!77591)) **GitLab Enterprise Edition**
- [Update acme-client to v2.0.9](gitlab-org/gitlab@c0a40f092db148ec87dc0bb09d75f664e7ebd305) ([merge request](gitlab-org/gitlab!77534))
- [Update rouge gem version](gitlab-org/gitlab@bad64f0b050212029e5a7ae2b4d5ea696b36ee48) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/76884))
- [Adjust bottom margin for loose markdown lists](gitlab-org/gitlab@c197e14dbd8fb307c4580e26d1196e703315b449) ([merge request](gitlab-org/gitlab!77275))
- [Remove running build entries when calling doom on a build](gitlab-org/gitlab@bedc9243d29e8c5bbfd8a1c17373e8d09c5f388a) ([merge request](gitlab-org/gitlab!77507))
- [Fix migration for cases with empty strings](gitlab-org/gitlab@8d5405a6516ee07721fadcc43c1da27fc0b7a177) ([merge request](gitlab-org/gitlab!77506))
- [Fix 500 errors when renaming projects with underscores](gitlab-org/gitlab@4a70f4ef144347dc9dc98240cfc63693e2458855) ([merge request](gitlab-org/gitlab!77485))
- [Geo: adapt verification timed out query to use state table](gitlab-org/gitlab@2b6d41e07fc4be9318aa0402856cb4f23aa46dc3) ([merge request](gitlab-org/gitlab!77364)) **GitLab Enterprise Edition**
- [Allow admins to foce confirm emails](gitlab-org/gitlab@e3a73408c5d8fea67dc613fb54225c925115eb50) ([merge request](gitlab-org/gitlab!77287))
- [Ignore new line differences when deciding whether to squash MR](gitlab-org/gitlab@7b38fbeeddbaed7fc34470ee29a7d6a0c7bd2793) by @trakos ([merge request](gitlab-org/gitlab!77429))
- [Fix re-use of extensions between instances](gitlab-org/gitlab@6c29b2da23027c526be90091370a9dcb663a46c2) ([merge request](gitlab-org/gitlab!77319))
- [Fix nil actor errors in Sentry API handler](gitlab-org/gitlab@fa51f84199e4ef09d3c7d5fe96927bf2aebfed3d) ([merge request](gitlab-org/gitlab!77340))
- [Removes the dismiss button from the pipeline header alert](gitlab-org/gitlab@e1f8647c94e84033856f94ac0bedf49e31b6e908) ([merge request](gitlab-org/gitlab!77128))
- [Call dependency proxy cleanup workers in purge](gitlab-org/gitlab@ed164a8c593f4e4a34db9e3f056721ee30f67563) ([merge request](gitlab-org/gitlab!77043))
- [Add Auth0, JWT, and Shibboleth to list of providers with icons](gitlab-org/gitlab@67a5600d4b36f1a673be94ed75aab70426d63a78) ([merge request](gitlab-org/gitlab!77213))
- [Fix Prometheus endpoint to return created alerts](gitlab-org/gitlab@d473fefa655b7d362f8ebcc4d1205b2955d466fd) ([merge request](gitlab-org/gitlab!77168))
- [Make time track help state top margin consistent](gitlab-org/gitlab@010bca712fd8db81589e8cd4d73b90983735868c) ([merge request](gitlab-org/gitlab!77087))
- [Validate against duplicates in job needs](gitlab-org/gitlab@1aa37265cf00ac987cd33a56823db7bfdd0238a5) ([merge request](gitlab-org/gitlab!77083))
- [Fix MergeRequest's MergeUser for non-MWPS merges in GraphQL API](gitlab-org/gitlab@a65d4e2b68f3849c9d5193e38fcf300aa0985549) by @trakos ([merge request](gitlab-org/gitlab!76043))
- [Align roadmap quarters to calendar quarters](gitlab-org/gitlab@e0e4058d7d934bdc3db3c06ab8449b3d35049621) by @espadav8 ([merge request](gitlab-org/gitlab!76927)) **GitLab Enterprise Edition**
- [checks: Fix revalidation of preexisting commits](gitlab-org/gitlab@d86514f1068552632ea4988d705b18803938f696) ([merge request](gitlab-org/gitlab!76106))
- [Fix project import from remote to import from S3](gitlab-org/gitlab@242c4c8f6128580d78da81e18a655c7dbda7a380) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/75170))
- [Mark vulnerabilities as not resolved on default branch on ingestion](gitlab-org/gitlab@80e79c7adc9574a485628b1479ababd98600551d) ([merge request](gitlab-org/gitlab!77060)) **GitLab Enterprise Edition**
- [Skip updating vulnerability statistics if there are no new records](gitlab-org/gitlab@e580999f2b52996769a80a0930f5fc846bf7b7a2) ([merge request](gitlab-org/gitlab!77056)) **GitLab Enterprise Edition**
- [Remove legacy pages config updates](gitlab-org/gitlab@a1a540c0c4db7376cce601cc87e14f9193302c3b) ([merge request](gitlab-org/gitlab!76918))
- [Do not check SSO session for git operations originating from CI/CD jobs](gitlab-org/gitlab@fc84cab8beb8e64df750e7e4019978d4551f886f) ([merge request](gitlab-org/gitlab!76909)) **GitLab Enterprise Edition**
- [MR Documentation suggestions](gitlab-org/gitlab@9f4cf0975108469e83ec16fb30530f69c2fdc4a9) by @lzampier ([merge request](gitlab-org/gitlab!66778))
- [Drop reindexing leftovers only if exclusive lease is granted](gitlab-org/gitlab@0b4a82f2120527a21a502ca8531d7da0726c3dd5) ([merge request](gitlab-org/gitlab!75290))
- [Fix import project from gitlab.com error](gitlab-org/gitlab@677873e2d0df439cda3a5a92eabaf76e354fa9bb) by @orozot ([merge request](gitlab-org/gitlab!76768))
- [Fix filename overflowing modal when importing](gitlab-org/gitlab@b49c821609cee720da8d277488fd2969f3f97d25) by @KevSlashNull ([merge request](gitlab-org/gitlab!75891))
### Changed (135 changes)
- [Change hashing algorithm in webpack](gitlab-org/gitlab@8d42ec95c12041ce8738828a9e07e7569afd8bea) ([merge request](gitlab-org/gitlab!78581))
- [Swap FK ci_pipeline_artifacts to projects for LFK](gitlab-org/gitlab@5e3f68fc65480679d2e12aaab0ca05729e56c079) ([merge request](gitlab-org/gitlab!78058))
- [Remove permitted_attributes_for_import_export feature flag](gitlab-org/gitlab@8897e37db2c20621fc59371f4e3c38c0f6048ad2) ([merge request](gitlab-org/gitlab!75090))
- [Do not add a failed build todo before auto-retry](gitlab-org/gitlab@971b38d23fd1359b6e9838ec3df8e5a3a6745fc9) ([merge request](gitlab-org/gitlab!77972))
- [Redesign new policy form](gitlab-org/gitlab@eedf5c443a761b90d3b9f4cf31c8c5afc150fb99) ([merge request](gitlab-org/gitlab!77482)) **GitLab Enterprise Edition**
- [Labels widget - focus first item on search](gitlab-org/gitlab@13986d5bb220d21830b8462170daf856c59bc3e2) ([merge request](gitlab-org/gitlab!78425))
- [Add shared runner tab to group CI/CD analytics](gitlab-org/gitlab@927f165c4d6d02006ddb2acca84c7b3cde97644d) ([merge request](gitlab-org/gitlab!78014)) **GitLab Enterprise Edition**
- [Update sort name from Last updated to Updated date](gitlab-org/gitlab@546e0a86241a332bde96bacd991876db06ea6c69) ([merge request](gitlab-org/gitlab!77684))
- [Warn when mention all users in a group](gitlab-org/gitlab@1c858cc3e2c13f05068f83a3bb81451084c3c1f4) ([merge request](gitlab-org/gitlab!77624))
- [Check for removed external issues before creation](gitlab-org/gitlab@cb2ee27d217c9616f297b05e9ce473aec94d920c) ([merge request](gitlab-org/gitlab!78323)) **GitLab Enterprise Edition**
- [Replace Member created state with active](gitlab-org/gitlab@58655c28e5232fd4b79cd85693f526ffc7591303) ([merge request](gitlab-org/gitlab!76653))
- [Polish Slack application edit page UI](gitlab-org/gitlab@bc80b81cdf3207196b294d19752e56a4a070eb05) ([merge request](gitlab-org/gitlab!78252)) **GitLab Enterprise Edition**
- [Enable feature flag bulk_expire_project_artifacts](gitlab-org/gitlab@df74c6101841f141a5cd993665f0bce1c75606fc) ([merge request](gitlab-org/gitlab!78429))
- [Make pipeline badges Pajamas-complient](gitlab-org/gitlab@855d9ddf8511364a892f3bb1b6c12f97770d350a) ([merge request](gitlab-org/gitlab!77980))
- [Format email code blocks and code blocks in emails](gitlab-org/gitlab@d9e12b8fd319285d0415b794750e531bff5f11ba) by @smokris ([merge request](gitlab-org/gitlab!76977))
- [Geo Sites - Icon Actions](gitlab-org/gitlab@2bf77ebf3f0b27edca536737aa7a88afd7a05786) ([merge request](gitlab-org/gitlab!78410)) **GitLab Enterprise Edition**
- [Geo - Rename routes from Nodes to Sites](gitlab-org/gitlab@7e9d16fa36764634c7eb230f81dcae68fcd9cdff) ([merge request](gitlab-org/gitlab!78150)) **GitLab Enterprise Edition**
- [Cleanup after AddPrimaryEmailToEmailsIfUserConfirmed](gitlab-org/gitlab@074490e6d9646d5757bfc5b309530f4bfb564c2f) ([merge request](gitlab-org/gitlab!76141))
- [Change default shallow clone depth to 20](gitlab-org/gitlab@07ed1b8bbfd9e9088cc0aa30de35547aeec54f92) ([merge request](gitlab-org/gitlab!77576))
- [Update webhook badges to pajamas](gitlab-org/gitlab@173a008c9800be87ef6fc7991bf84b44fd62cd8a) ([merge request](gitlab-org/gitlab!78325))
- [Update button text to expand all files](gitlab-org/gitlab@95d919a3ea9b4fbe3dee9b2155417491285ede38) ([merge request](gitlab-org/gitlab!78322))
- [Ignnore Finding Evidence summary column](gitlab-org/gitlab@888bfec3014f5b9fe6df528a25ff22d2c22774a1) ([merge request](gitlab-org/gitlab!78314)) **GitLab Enterprise Edition**
- [Add LFK ci_daily_build_group_report_results to projects](gitlab-org/gitlab@59186e18639f1de38dd299584a1b7a31da4fb72b) ([merge request](gitlab-org/gitlab!78149))
- [Enable by default the feature flag to track Geo proxy events](gitlab-org/gitlab@3254c186c2c148ffd66646c17b7d22a6ec8da652) ([merge request](gitlab-org/gitlab!78301)) **GitLab Enterprise Edition**
- [Update on-demand scans breadcrumbs](gitlab-org/gitlab@b880dcb10a7a24989f9cfe9bb5986ceb20eacad8) ([merge request](gitlab-org/gitlab!78063)) **GitLab Enterprise Edition**
- [Change pipeline page layout to fluid](gitlab-org/gitlab@33bab2ef1a7f96860a3761238492868cb4ce3109) ([merge request](gitlab-org/gitlab!78124))
- [Default to fluid layout for the pipeline editor](gitlab-org/gitlab@b3cad6c69325d466090c742e813f938dddfe6be0) ([merge request](gitlab-org/gitlab!78038))
- [Skip failed builds](gitlab-org/gitlab@ba8a9b5b2b3f51c04f472ee7592be34c2411c742) ([merge request](gitlab-org/gitlab!78218)) **GitLab Enterprise Edition**
- [Redirect to on-demand scan form after editing a DAST profile](gitlab-org/gitlab@d5edfabb6dbbb706801305a09bd4625f5cdff5b3) ([merge request](gitlab-org/gitlab!77819)) **GitLab Enterprise Edition**
- [Conditionally disable group user cap enablement](gitlab-org/gitlab@a746c36cf8ca59483cf885a05984b68d7545621a) ([merge request](gitlab-org/gitlab!76130)) **GitLab Enterprise Edition**
- [Use normalized license data in csv export](gitlab-org/gitlab@c77746663f2777f9fa645d8c0fee4543b34c07a1) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78266)) **GitLab Enterprise Edition**
- [Enable vue-router in package registry](gitlab-org/gitlab@37277b57975d68b8ac6144ccd7f998a815f05cd8) ([merge request](gitlab-org/gitlab!77762))
- [Replace window.confirm with GlModal for registration token reset](gitlab-org/gitlab@ba77f398a904f3147985e17de2a34b85c4cf97f2) ([merge request](gitlab-org/gitlab!77883))
- [Enable `packages_installable_package_files` by default](gitlab-org/gitlab@a72b417afc0c0a026258b4d04b808ad30e86be0d) ([merge request](gitlab-org/gitlab!78254))
- [Labels widget - focus first item on search](gitlab-org/gitlab@2a3760507fd6874dac0e6b6a286978df649ab916) ([merge request](gitlab-org/gitlab!78246))
- [Increase exclusive lease timeout](gitlab-org/gitlab@45cd1d6f10d4e59ae36317adc687cbb5c4b68760) ([merge request](gitlab-org/gitlab!78240)) **GitLab Enterprise Edition**
- [Add offline, stale count to runner admins section](gitlab-org/gitlab@1351c794534c43fcb14df4d32da98ad4a73c158d) ([merge request](gitlab-org/gitlab!77871))
- [Enable trial onboarding flow for other sources](gitlab-org/gitlab@d95bb41326a8487ed1dceaa06ea7e500353873a4) ([merge request](gitlab-org/gitlab!77992)) **GitLab Enterprise Edition**
- [Add member_namespace_id to members table](gitlab-org/gitlab@4dae8709826eaede354d906370cd91a0fa230911) ([merge request](gitlab-org/gitlab!77592))
- [Convert trial lead creation form to Vue](gitlab-org/gitlab@bcbe2b3ddfb71609295262857d313b8743ea1e48) ([merge request](gitlab-org/gitlab!77537)) **GitLab Enterprise Edition**
- [Update approval settings to toast on success](gitlab-org/gitlab@ad8c805970245dc3c3118a318ff0e23fc19a2a5d) ([merge request](gitlab-org/gitlab!77975)) **GitLab Enterprise Edition**
- [Format total count of runners in tabs by locale](gitlab-org/gitlab@3b516f7d4359f5a4c15f9b9b769ecce7990f85d5) ([merge request](gitlab-org/gitlab!78187))
- [Updated Group/Project home panel ID copy-on-click](gitlab-org/gitlab@55072ccd0870eab2031c4f453b8951b015910faa) by @stingrayza ([merge request](gitlab-org/gitlab!75904))
- [Update MR head pipeline when pipeline event is published](gitlab-org/gitlab@5a8dd34937474f90d39bc4a9a2332fb69ae6b90a) ([merge request](gitlab-org/gitlab!78172))
- [Removes FK for ci_pipeline_schedules to users](gitlab-org/gitlab@abea2e32298f4efcda6fe062d626f9c1e3a1c66a) ([merge request](gitlab-org/gitlab!78163))
- [Removes FK for ci_job_token_project_scope_links to users](gitlab-org/gitlab@3a12e4cd830d5a9c910484377388f7187aa18306) ([merge request](gitlab-org/gitlab!78162))
- [Swap FK ci_build_report_results to projects for LFK](gitlab-org/gitlab@6fbc44b7e47ce8ba2e39da88fdb694ecaf8e992a) ([merge request](gitlab-org/gitlab!78157))
- [Swap FK ci_resource_groups to projects for LFK](gitlab-org/gitlab@fe98ddccf9d5f9fa2cc2cfec5f8132101bf2cf11) ([merge request](gitlab-org/gitlab!78156))
- [Swap FK ci_freeze_periods to projects for LFK](gitlab-org/gitlab@84bac9521da055ef8bc7e66fcab4443cf238a1a8) ([merge request](gitlab-org/gitlab!78155))
- [Add LFK ci_unit_tests to projects on project_id](gitlab-org/gitlab@3e4b59847decb8f8954862c1581e566ece04d9b4) ([merge request](gitlab-org/gitlab!78146))
- [Enable new rich text/source toggle in self-managed](gitlab-org/gitlab@ccac603d81f009b5fae616e9b3298b7d8d0fc6ba) ([merge request](gitlab-org/gitlab!77995))
- [Nullify project_namespace_id reference](gitlab-org/gitlab@9699e82fbb26b6921b01f1eb2e15189f106605da) ([merge request](gitlab-org/gitlab!78046))
- [Geo Nodes Form - Object Storage Beta Badge](gitlab-org/gitlab@578cdcfe5b81f2de7a49131b82a9afd56a1323cd) ([merge request](gitlab-org/gitlab!77989)) **GitLab Enterprise Edition**
- [Update total count of runners for each type](gitlab-org/gitlab@92512ba6c3fdb2f36e49f552e525bdd914098dee) ([merge request](gitlab-org/gitlab!77752))
- [Clean up add GitLab to Slack app](gitlab-org/gitlab@1c86cc581f5d74c87dc79e0891ad7bc172b0c0c9) ([merge request](gitlab-org/gitlab!78094)) **GitLab Enterprise Edition**
- [Fix help text for checkboxes on integrations form](gitlab-org/gitlab@dc0edd94ffa032702dac1669a216b0c41962469e) ([merge request](gitlab-org/gitlab!77885))
- [Encrypt static_object_token_encrypted field via background migration](gitlab-org/gitlab@12f6ada924e737e6d0ecf4f50bf45fc9b7f3fe80) ([merge request](gitlab-org/gitlab!76684))
- [Migrate enable Gitpod confirmation modal to `GlModal`](gitlab-org/gitlab@699354cc7380c6b4346aefaafc8e9b154d5ab198) ([merge request](gitlab-org/gitlab!77716))
- [Allow skipping CI when rebasing in UI](gitlab-org/gitlab@ef01df71974b083fcb773b397253a55c074e710c) by @KevSlashNull ([merge request](gitlab-org/gitlab!76056))
- [Update Nokogiri to v1.12.5](gitlab-org/gitlab@e3c195f6db687cccddf2bd3dcd07b873e853b197) ([merge request](gitlab-org/gitlab!77631))
- [Use badges for branches/tags in commit page](gitlab-org/gitlab@6a13a3aee811edba6c436dc101b6142e7f31dd13) ([merge request](gitlab-org/gitlab!77851))
- [Update DAST On-demand scan template](gitlab-org/gitlab@8f13ed956909aa9528afd1d89145012d052f9a4e) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/73564)) **GitLab Enterprise Edition**
- [Update secret-detection git log command](gitlab-org/gitlab@7c0576b5901f5fef72b5b4ae949534b92871e503) ([merge request](gitlab-org/gitlab!77722))
- [Add validation for new_user_signups_cap enabling](gitlab-org/gitlab@708d3a4891bf5575f3e891e43d860d3d70cc52d3) ([merge request](gitlab-org/gitlab!75906)) **GitLab Enterprise Edition**
- [Update upload a license file docs](gitlab-org/gitlab@2e39fcc0ea0af37d4a397f195b6b0f1a8b99c80a) ([merge request](gitlab-org/gitlab!77311)) **GitLab Enterprise Edition**
- [Reposition and restyle integration reset button](gitlab-org/gitlab@f4a072b67ab4aef9f6a27bc1fb20478cb6fa2ea3) ([merge request](gitlab-org/gitlab!77921))
- [Add merge trains copy to ff merge](gitlab-org/gitlab@e795349c99768f8f6599688e4c4b2897746b8848) ([merge request](gitlab-org/gitlab!77904))
- [Remove carat from dropdown button](gitlab-org/gitlab@41f50cde39f7a9347d96c566a77e26dd838df853) ([merge request](gitlab-org/gitlab!77870))
- [Convert OAuth2 authorization panel to GitLab UI utility classes](gitlab-org/gitlab@7783f443a91240c6fe0fc6bfd1060fc373a286e2) ([merge request](gitlab-org/gitlab!77621))
- [Translate settings string in user preferences](gitlab-org/gitlab@d1928d59b92e33bc992192a286e9ee5fc2ce3d60) ([merge request](gitlab-org/gitlab!77439))
- [Replaced browser confirm modal with GlModal for lock button](gitlab-org/gitlab@46b3429a5afcaba64e1be54c4acd0ea4bc2a5f7e) ([merge request](gitlab-org/gitlab!77690)) **GitLab Enterprise Edition**
- [Enable linear versions in GroupDescendantsFinder](gitlab-org/gitlab@3c7dc938bfe474d55503bdfa0c95ccf4eb78ea4d) ([merge request](gitlab-org/gitlab!75877))
- [Create Deployments in Separate Transaction](gitlab-org/gitlab@b74b75293717263e52ac8da3c77be7a4801996e9) ([merge request](gitlab-org/gitlab!77840))
- [Improve UI text of external authentication](gitlab-org/gitlab@2fb0a9fa6e6a2647910f6110115e80e1a169243b) ([merge request](gitlab-org/gitlab!75822))
- [Update search badges to pajamas](gitlab-org/gitlab@a60ee44463c5bea59847a8ceebc15af74db2cb95) ([merge request](gitlab-org/gitlab!77812))
- [Switch from confirm to default](gitlab-org/gitlab@0d7434f06046bfef8d01f86b7f3526cd2002df5e) ([merge request](gitlab-org/gitlab!77780))
- [Improve UI text of group webhooks page](gitlab-org/gitlab@8272c8ce1bd721a8783137e5efc6595524ac8757) ([merge request](gitlab-org/gitlab!76187))
- [Refactor admin labels to use shared HAML partial](gitlab-org/gitlab@a016abab7d3a95f2bb04db557e0e5e84fd4aa42e) ([merge request](gitlab-org/gitlab!77546))
- [Update flash alerts of Admin Runner UI](gitlab-org/gitlab@c7d1fc6075a38186d3877d5b812c6d8ea8822e21) ([merge request](gitlab-org/gitlab!77669))
- [Sort followed users events by id desc](gitlab-org/gitlab@d67b33e8b2b5f636abaa12ae711bd3ef66523408) ([merge request](gitlab-org/gitlab!77436))
- [GitLab Version - Update Version Status Indicator](gitlab-org/gitlab@e8826a3c4221a9793f88a9a0e817653a037641ca) ([merge request](gitlab-org/gitlab!77521))
- [Prevent raising validation errors for SyncDashboardsWorker](gitlab-org/gitlab@e7f36851f7b02e1c4e67b159b961caef7816a840) ([merge request](gitlab-org/gitlab!77657))
- [Update snippet search badge to use pajamas](gitlab-org/gitlab@b1fd72385f1c416a9109cae62267039c00705e8c) ([merge request](gitlab-org/gitlab!77726))
- [Improve outbound requests settings UI text](gitlab-org/gitlab@8ecdf1de3e9b4428f3836c886db470121998585b) ([merge request](gitlab-org/gitlab!77488))
- [Remove Geo pages verification feature flag](gitlab-org/gitlab@9a76f4e6712e855a491e90fe69e501e34508f9c1) ([merge request](gitlab-org/gitlab!77551)) **GitLab Enterprise Edition**
- [Geo: Verify LFS objects](gitlab-org/gitlab@aa4207006a9b63d2c3731e680551eb886c90df9e) ([merge request](gitlab-org/gitlab!76363)) **GitLab Enterprise Edition**
- [Add support for user_id, group_id and group_path](gitlab-org/gitlab@a2187ab03790d31cf0a92f17ed01ff83c2d1c4af) ([merge request](gitlab-org/gitlab!76595)) **GitLab Enterprise Edition**
- [Remove `log_import_export_relation_creation` feature flag](gitlab-org/gitlab@ad7c30ff1d8054915adf35b164314c36e4e48720) ([merge request](gitlab-org/gitlab!77144))
- [Remove feature flag optimize_merge_request_parser](gitlab-org/gitlab@ff5b66f0dac674acd11070ca4e4501720f16162f) ([merge request](gitlab-org/gitlab!68379))
- [Update look and feel of runner heading](gitlab-org/gitlab@f3cf2fee21f932765556b79fe343c56a49fc6884) ([merge request](gitlab-org/gitlab!77519))
- [Move the Runner edit page to an `/edit` path](gitlab-org/gitlab@0db46eaeb1973543394374737e5f040600989ebb) ([merge request](gitlab-org/gitlab!77514))
- [User linear version UserGroupNotificationSettingsFinder#execute](gitlab-org/gitlab@9d4a65977f91211ba6ac52a0706dbff39eb929d7) ([merge request](gitlab-org/gitlab!75645))
- [Refactored sidebar jobs details container badge](gitlab-org/gitlab@14fcb9fe7ce2773bfb25caeb42b657475cbbedf1) ([merge request](gitlab-org/gitlab!77675))
- [Remove deployments_archive feature flag](gitlab-org/gitlab@616cfcc6e78979b43540c74019c1ae2906b207c5) ([merge request](gitlab-org/gitlab!77490))
- [Update Coverage-Fuzzing yml and use last package file in corpus](gitlab-org/gitlab@0bb3bcc59c61aedc459e8a81c8ebbbfcf3b928da) ([merge request](gitlab-org/gitlab!77228)) **GitLab Enterprise Edition**
- [Make strings in user preferences translatable](gitlab-org/gitlab@df4151982ee381efa303a1f6a514069d0ea39f42) ([merge request](gitlab-org/gitlab!77483))
- [Deprecate plaintext field static_objects_external_storage_auth_token](gitlab-org/gitlab@733e5ddd605435b7cbe10449f1e58c8ac3b04988) ([merge request](gitlab-org/gitlab!77579))
- [Add createAlert as alternative to createFlash](gitlab-org/gitlab@a205f845c65ef8728b7489b320c3ce656de7f5de) ([merge request](gitlab-org/gitlab!76136))
- [Increase icon size for categories in emoji picker](gitlab-org/gitlab@f075efeacac0720f13528a1cd740e5c5105016b3) ([merge request](gitlab-org/gitlab!77577))
- [Update acts-as-taggable-on gem version](gitlab-org/gitlab@c84e36fedbb4ecdb2834810eb15c07584f0b68bc) ([merge request](gitlab-org/gitlab!77565))
- [Refactored Badges on environment items](gitlab-org/gitlab@055cd12f11c10dfb0e502faf9ed0adc836a05b21) ([merge request](gitlab-org/gitlab!77113))
- [Update nuget version regex](gitlab-org/gitlab@d1f2e41a4d4e23e7a2f4391725a8347740d2dd19) ([merge request](gitlab-org/gitlab!77543))
- [Remove commit templates variable placeholders from settings](gitlab-org/gitlab@940da33d70644349f97219087fe1fa18b5c3fe5e) by @trakos ([merge request](gitlab-org/gitlab!77350))
- [Externalize strings for translation on dashboard](gitlab-org/gitlab@006ae2d6172f3c10e3764db9f8c55d2ef6b2640b) ([merge request](gitlab-org/gitlab!77432))
- [Make strings in top nav translatable](gitlab-org/gitlab@03c5a413485f24c6014427b2de8b654728566ecc) ([merge request](gitlab-org/gitlab!77475)) **GitLab Enterprise Edition**
- [Fail remote mirror if LFS sync fails](gitlab-org/gitlab@10c8a8ba9c1fd1bb731e27afa1006bc8c31f6bd4) ([merge request](gitlab-org/gitlab!77339))
- [Update Azure storage Gem dependencies](gitlab-org/gitlab@2741aefc230f467e0574682333cb07a9b3df7e80) ([merge request](gitlab-org/gitlab!77472))
- [Add Pajamas-complient badge for runners](gitlab-org/gitlab@f8e41cd2351fe2f64099bf8762d02f0281ee630a) ([merge request](gitlab-org/gitlab!77399))
- [Translate labels in user main settings](gitlab-org/gitlab@9cb8eb9e01c9f3b64eb3c41e7069096dda558d0e) ([merge request](gitlab-org/gitlab!77450))
- [Allow hidden pacakge files to be downloaded](gitlab-org/gitlab@e6eecff1491a3817451fd481f4e79a6852beda53) ([merge request](gitlab-org/gitlab!77291))
- [Externalize strings for translation user's chat settings](gitlab-org/gitlab@c9d0b0c87a4cd56a420d73e3d2778662e80109f4) ([merge request](gitlab-org/gitlab!77433))
- [Use "never contacted" wording in runner's frontend](gitlab-org/gitlab@2048b5e101b868c8c27db07221feaf6878247010) ([merge request](gitlab-org/gitlab!77375))
- [Rename routes for project services](gitlab-org/gitlab@523c3082b4186f1f2ca63bad9e5573a9f3137eb2) ([merge request](gitlab-org/gitlab!77376))
- [Update button variant and category](gitlab-org/gitlab@9d6c6562651cab2129c3a815d22b4ef37b66e340) ([merge request](gitlab-org/gitlab!77313))
- [Alter phone constraint bigger](gitlab-org/gitlab@74d33307a6b254d889f5dcbd67c583b665d41a0f) by @memorycancel ([merge request](gitlab-org/gitlab!76516))
- [Set feature flag lfs_auto_link_fork_source to true by default](gitlab-org/gitlab@0b5407ccc9a198b1e779850d4c4951a7b63afb70) ([merge request](gitlab-org/gitlab!77341))
- [Registration Flow - Don't pre-select role](gitlab-org/gitlab@81fea3beaae533a27a041850b691c06b900697ac) by @tarunvelli ([merge request](gitlab-org/gitlab!76051))
- [Remove find_tag_via_gitaly feature flag](gitlab-org/gitlab@cf9515de7a31631b18cfef1580bba90e2f1abdcb) ([merge request](gitlab-org/gitlab!77303))
- [Adjusts Member awaiting scope to be distinct](gitlab-org/gitlab@0f117a67c9c59afef603db58e0a186a815e08dfc) ([merge request](gitlab-org/gitlab!76864)) **GitLab Enterprise Edition**
- [Add fail flag to pipeline trigger examples](gitlab-org/gitlab@666c22848f6ff042d5fde38b6649ca2c81f5eb6e) ([merge request](gitlab-org/gitlab!77095))
- [Release Geo: Treat missing blobs as sync failed](gitlab-org/gitlab@1ee0241c957ec82ce10616f69e916833514da2ff) ([merge request](gitlab-org/gitlab!77274)) **GitLab Enterprise Edition**
- [Delete events in batches when project is destroyed](gitlab-org/gitlab@7d633be80765ddd75436dd94663c01f2da27b728) ([merge request](gitlab-org/gitlab!77031))
- [Add limitation warning for permission export](gitlab-org/gitlab@079fe3bbe45129c149d3981b752ea2ebde273e91) ([merge request](gitlab-org/gitlab!77121)) **GitLab Enterprise Edition**
- [Change texts about credit card verification](gitlab-org/gitlab@cc868d4accbb5f44259c66a463b0bb23ff9148c4) ([merge request](gitlab-org/gitlab!77111)) **GitLab Enterprise Edition**
- [Treat API requests from the frontend as web traffic in the rate limiter](gitlab-org/gitlab@7b54a4b5184003f85919921c2aa8a7ba3848c989) ([merge request](gitlab-org/gitlab!76965))
- [Restyle "hints" on appearance settings](gitlab-org/gitlab@c17e794bd8d2cb427bb04d775afb9b1acaef1454) by @KevSlashNull ([merge request](gitlab-org/gitlab!75871))
- [Do not show participants invisible to the user](gitlab-org/gitlab@d07f416fbeb5f924a41c064138512da035f1905f) ([merge request](gitlab-org/gitlab!77021))
- [Use connects_to to connect to the Geo tracking DB](gitlab-org/gitlab@235cfc0308426acfc22e5ad29fd29d91c4c54d08) ([merge request](gitlab-org/gitlab!76700)) **GitLab Enterprise Edition**
- [Add CI_JOB_JWT_V2 with iss and aud format changes](gitlab-org/gitlab@25081011347036615ae981314f6cfcb252f4e671) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/72555))
- [Migrate the visibility change confirmation to vue](gitlab-org/gitlab@db85f7235a474ee1bb48ba194f15aae274b6e90d) ([merge request](gitlab-org/gitlab!76417))
- [Drop jira_use_first_ref_by_oid feature flag](gitlab-org/gitlab@ce5c275e4ccc00ce67b8c885d504aa220335059e) ([merge request](gitlab-org/gitlab!76611))
- [Update button variant to confirm](gitlab-org/gitlab@2d80d85cbfaa8a80145a992c933c25866a3b7c86) ([merge request](gitlab-org/gitlab!77022))
- [Remove OAuth paths from protected paths rate limit](gitlab-org/gitlab@cf35d50245622626d178ab21fe1b429bc85cb729) ([merge request](gitlab-org/gitlab!76882))
- [Add vulnerability_states for scan_result_policies](gitlab-org/gitlab@a7e8caeb92aea8508503bdd90eb08fcc1e74271b) ([merge request](gitlab-org/gitlab!76865)) **GitLab Enterprise Edition**
- [Add toggle method to control use_minimum_char_limit](gitlab-org/gitlab@a4d04c0b2d3786cd0ba3e158cadc4bdbd547aa57) by @orozot ([merge request](gitlab-org/gitlab!76835))
### Removed (13 changes)
- [Remove feedback link in discover security point](gitlab-org/gitlab@e721427a2c56d337ec8899741ba6f146ec055379) ([merge request](gitlab-org/gitlab!78313)) **GitLab Enterprise Edition**
- [Revert "Merge branch 'rajat/work-hierarchy' into 'master'"](gitlab-org/gitlab@025fa4da03ea514fa83feb5a8b5b0dff98bc1a48) ([merge request](gitlab-org/gitlab!78395))
- [Remove cached_mr_widget feature flag](gitlab-org/gitlab@38c4ca9b293730ab4e9015f371234aee2422e654) ([merge request](gitlab-org/gitlab!78355))
- [Remove automatic addition of incident label](gitlab-org/gitlab@d4a57b8fc3b879a02760b7be4780f23ee9a26ee7) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78258))
- [Delete paginatable_namespace_drop_down_for_project_creation FF](gitlab-org/gitlab@a20daa48a9b8331264b21571ff4bd709efa5b1a7) ([merge request](gitlab-org/gitlab!72240))
- [Remove redis MultiStore implementation](gitlab-org/gitlab@c66fb99d1e09f3b061c5d8a678a17f772376f4ef) ([merge request](gitlab-org/gitlab!78049))
- [Remove "Saved scans" tab from DAST configuration](gitlab-org/gitlab@011bf15a10f914ab9f57eff5d5cf513c2e928b74) ([merge request](gitlab-org/gitlab!77288)) **GitLab Enterprise Edition**
- [Remove EXMOD experiment documentation](gitlab-org/gitlab@f355b4d84cc9e3beb6ea28c1046c50c36b3ac766) ([merge request](gitlab-org/gitlab!78091))
- [Remove delete_branch_confirmation_modals feature flag](gitlab-org/gitlab@336301f70b9f2af71ed73bdfe101b83747f08fd7) ([merge request](gitlab-org/gitlab!77231))
- [Remove problematic query from obselete open environment in diff feature](gitlab-org/gitlab@90f07756725877199ef1661fdabad84b8acd0d4d) ([merge request](gitlab-org/gitlab!77963))
- [Remove LooseIndexScanDistinctCount class](gitlab-org/gitlab@e105810c007104bc48edb5c88a9544115a7319a0) ([merge request](gitlab-org/gitlab!77746))
- [Delete vue_issuables_list feature flag](gitlab-org/gitlab@3abadcad5791b8b40a9db9905a4275b9fee4e144) ([merge request](gitlab-org/gitlab!77051))
- [Remove vulnerability_location_image_filter feature flag](gitlab-org/gitlab@a9a8fde623c5936f667c5fed890394478a4cf3b9) ([merge request](gitlab-org/gitlab!76298))
### Security (4 changes)
- [Upgrade mermaid js library](gitlab-org/gitlab@7ad21d909cea9e2ec1dec848c2c395aee745db8b) ([merge request](gitlab-org/gitlab!78176))
- [Rate limit /users/sign_up](gitlab-org/gitlab@9c15124fdb59b50fd210837d803dba3ed1723284) ([merge request](gitlab-org/gitlab!77835))
- [Rate limit update username action](gitlab-org/gitlab@5e4cc7ebac15542c14fa82ba408d21d75345d774) ([merge request](gitlab-org/gitlab!77221))
- [Enforce rate limit per IP on /users/:username/exists](gitlab-org/gitlab@5e9c4d189b90caec408c3649b84d2787c8931cfa) ([merge request](gitlab-org/gitlab!77119))
### Performance (12 changes)
- [Avoid extra Sidekiq jobs for expiring CI etags](gitlab-org/gitlab@dc29dc66328fc6609c134d6569f8a6c0c74c9309) ([merge request](gitlab-org/gitlab!78468))
- [Optimize query for issue neighbors](gitlab-org/gitlab@1833947a07026c195175ab4056336e4b6b480a30) ([merge request](gitlab-org/gitlab!78443))
- [Improve on-demand scans polling performances](gitlab-org/gitlab@186f44f9760b0c5760c7ddd27bb34f4f1789006c) ([merge request](gitlab-org/gitlab!78375)) **GitLab Enterprise Edition**
- [Remove ci_decompose_belonging_to_parent_group feature flag](gitlab-org/gitlab@c6926279b2e790d32146cf66b19a770fe443acd0) ([merge request](gitlab-org/gitlab!77944))
- [Optimize protected branches/tags matching](gitlab-org/gitlab@d95f91c344faacb36aad43adae2412c038d48280) ([merge request](gitlab-org/gitlab!77988))
- [Add index for resolving timeouts on environments page](gitlab-org/gitlab@171f3decb6f2e52739d2de9a0a868f62b715e2db) ([merge request](gitlab-org/gitlab!75767))
- [Inline diff line rendering](gitlab-org/gitlab@839bc405f542ea98d16a6a0b3bc9cb4566b08906) ([merge request](gitlab-org/gitlab!57237))
- [Utilize C version of CommonMark renderer](gitlab-org/gitlab@cc2380771b8c314bf325a2fe7212a02ef9675e37) ([merge request](gitlab-org/gitlab!75800))
- [Improve epic swimlanes query performance for group board](gitlab-org/gitlab@42de05b81420534abd05ce531436e08f9d906b53) ([merge request](gitlab-org/gitlab!75378)) **GitLab Enterprise Edition**
- [Fix slow events query for followed users](gitlab-org/gitlab@17b71e6ce339424ac6f5658da345b7b3e307b7e6) ([merge request](gitlab-org/gitlab!77028))
- [Read running builds from denormalized table upon assignment](gitlab-org/gitlab@7f669ae8570cc373581464861d764b0334c3a1c4) ([merge request](gitlab-org/gitlab!77104))
- [Introduce an optimized labels query on group transfer](gitlab-org/gitlab@7cdf20af2a29ab118663ce32dbb59794e93c12a4) ([merge request](gitlab-org/gitlab!77034))
### Other (68 changes)
- [Geo: Verify uploads](gitlab-org/gitlab@ddf052cf83d329149f359cd690447bbeccd95de0) ([merge request](gitlab-org/gitlab!78068)) **GitLab Enterprise Edition**
- [Add columns in prep of registry import](gitlab-org/gitlab@8d2ee3c7055dd089760d9fd8ffb1e6a0b7da130d) ([merge request](gitlab-org/gitlab!77725))
- [Remove ci_running_builds FK to projects](gitlab-org/gitlab@5e0a4b2309ba8d6d94533e8d52cc976152007cfb) ([merge request](gitlab-org/gitlab!78027))
- [Remove `scim_token_vue` feature flag](gitlab-org/gitlab@a99950d4a544ec74a67aaa44e3667d83920318da) ([merge request](gitlab-org/gitlab!78220))
- [Remove FK security_scans.build_id as we have LFK](gitlab-org/gitlab@fc438951bc97aca0e818730e51f83b730f3f2796) ([merge request](gitlab-org/gitlab!77919))
- [Add backfill migrations for ci namespace/project mirrors](gitlab-org/gitlab@10412e26ab4772f0a70975e3509eecad18d1ea01) ([merge request](gitlab-org/gitlab!76327))
- [Add package file cleanup jobs](gitlab-org/gitlab@d039bfa25a695d87a9486a5c56b190d42ecac65a) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/77212))
- [Remove ci_store_trace_outside_transaction feature flag](gitlab-org/gitlab@2efe1c3552b13e55e4ed6aacc75f50f87b4830cd) ([merge request](gitlab-org/gitlab!78465))
- [Fix Rails/SaveBang offenses](gitlab-org/gitlab@67db38fc01aeefe8ebce455c223d0292bd5d2ce4) by @edith007 ([merge request](gitlab-org/gitlab!75940)) **GitLab Enterprise Edition**
- [Remove FK dast_scanner_profiles_builds.ci_build_id as we have LFK](gitlab-org/gitlab@ac5eacabbdb89c6311df7763a07ae78a0067d8f4) ([merge request](gitlab-org/gitlab!77910))
- [Remove FK requirements_management_test_reports.build_id as we have LFK](gitlab-org/gitlab@aa91697c133b208b48b95e7df1d3f7bea2800018) ([merge request](gitlab-org/gitlab!77912))
- [Remove FK dast_site_profiles_builds.ci_build_id as we have LFK](gitlab-org/gitlab@89d4d45ea795febdbe6d49f0e6fcf107ab598f14) ([merge request](gitlab-org/gitlab!77916))
- [Fix GraphQL/FieldDefinitions offense (Part 3/4)](gitlab-org/gitlab@e3939b1b2814393988c642cc22d4ac01fba00df0) by @KevSlashNull ([merge request](gitlab-org/gitlab!76016))
- [Fix GraphQL/ArgumentName offense](gitlab-org/gitlab@10601fb5bf124aa47aa89119428b3655fa22f9e6) by @KevSlashNull ([merge request](gitlab-org/gitlab!76013))
- [Fix Rails/SaveBang offenses](gitlab-org/gitlab@2f817b54d9bb7a793c0e187b7541314a885bb44f) by @edith007 ([merge request](gitlab-org/gitlab!75988))
- [Fix Rails/SaveBang offenses](gitlab-org/gitlab@8c1b0a556c085cdd178dbbd150d04648c87092d9) by @edith007 ([merge request](gitlab-org/gitlab!75970)) **GitLab Enterprise Edition**
- [Fix Gitlab/DelegatePredicateMethods offenses](gitlab-org/gitlab@2a2bc7c5e700bf0531753ae3e58eb847d95d3dcc) by @edith007 ([merge request](gitlab-org/gitlab!76010))
- [Remove alllow database cross join from runner_matchers](gitlab-org/gitlab@7f4df5cc89b944c2227128cb88df063a078a629d) ([merge request](gitlab-org/gitlab!78084))
- [Remove opt_in_sidekiq_status feature flag](gitlab-org/gitlab@73166fc00e91a7c02ce77920b5f0685cd84f03d1) ([merge request](gitlab-org/gitlab!78279))
- [chore: Mark previous Recalculation background migrations as succeeded](gitlab-org/gitlab@4d50836b166c3e61879b44606820aa558667a6d6) ([merge request](gitlab-org/gitlab!77052))
- [Limit subscription page container to 990px](gitlab-org/gitlab@ffd11f2cb270a8a578b86ad7f5403c90fc5a56be) ([merge request](gitlab-org/gitlab!77947)) **GitLab Enterprise Edition**
- [Improve SSH key format validation](gitlab-org/gitlab@053b079d82c58a185afc4010440c78c64024944a) ([merge request](gitlab-org/gitlab!77996))
- [Remove `admin_deploy_keys_vue` feature flag](gitlab-org/gitlab@18f44e6f41b198e5986b0eee0e29c2b3806f111d) ([merge request](gitlab-org/gitlab!78144))
- [Remove `hide_access_tokens` feature flag](gitlab-org/gitlab@74f72fde3fa8b5c9298adc67ca149b5637519d32) ([merge request](gitlab-org/gitlab!78148))
- [Remove show.html.erb as Rails 5 now supports nonce-based CSP headers](gitlab-org/gitlab@dd23e8540b8a3e3ae3b5e93480422426c87ca039) by @edith007 ([merge request](gitlab-org/gitlab!75998))
- [Fix Rails/SaveBang offenses](gitlab-org/gitlab@9ee72296a506b389593abc5d0f5182a3e2a21f6a) by @edith007 ([merge request](gitlab-org/gitlab!75976))
- [Remove ci_pending_builds FK to projects](gitlab-org/gitlab@671e495b24f812df2f36b59ec1be592023aae85e) ([merge request](gitlab-org/gitlab!78010))
- [Truncate ci_namespace_mirrors and ci_project_mirrors](gitlab-org/gitlab@63143a7853b61a155d90d5ff3f3e033cedaf5b71) ([merge request](gitlab-org/gitlab!77953))
- [Remove feature flag multiple_gpg_signatures](gitlab-org/gitlab@e6f08a7853161ef2c3597bfa151ef7816f0dbf04) ([merge request](gitlab-org/gitlab!78112))
- [Backfill TestReports issue_id column](gitlab-org/gitlab@d1045bff47b7a231a5fc79990be5c3869f19457c) ([merge request](gitlab-org/gitlab!77770))
- [Fix Style/OpenStructUse offenses for users and package specs](gitlab-org/gitlab@a61455cd231d54ddee54cb6ebbd63ff5e1550df4) by @edith007 ([merge request](gitlab-org/gitlab!75240))
- [Fix Style/OpenStructUse offense for Gitlab::Database::Migrations::Runner](gitlab-org/gitlab@895a968955624e3f80d65523b7f9428a34e54791) by @edith007 ([merge request](gitlab-org/gitlab!75323))
- [Fix Style/OpenStructUse offenses](gitlab-org/gitlab@85f034ff82119df755959ff71edbe32454411fba) by @edith007 ([merge request](gitlab-org/gitlab!75289))
- [Pass formats explicitly when rendering .html file](gitlab-org/gitlab@9ab0a173f11a09248a65692f586e82fa5841b063) by @edith007 ([merge request](gitlab-org/gitlab!75775)) **GitLab Enterprise Edition**
- [Fix Rails/SaveBang offenses](gitlab-org/gitlab@11dd30f1eba382d96a84aa0985f812a175f290de) by @edith007 ([merge request](gitlab-org/gitlab!75969)) **GitLab Enterprise Edition**
- [Pass formats explicitly when rendering kerberos error](gitlab-org/gitlab@bcbf3501ece285a6fef2a5be057e27b69c522cfe) by @edith007 ([merge request](gitlab-org/gitlab!76011)) **GitLab Enterprise Edition**
- [Fix Style/OpenStructUse offenses in gitlab_controller_spec](gitlab-org/gitlab@e20818ecb8485a22e0e6d2341c79564bbca654aa) by @edith007 ([merge request](gitlab-org/gitlab!75194))
- [Pass formats explicitly when rendering .md file](gitlab-org/gitlab@d0a56f252c025fa25ac706387ef5a6094e3a267d) by @edith007 ([merge request](gitlab-org/gitlab!75779)) **GitLab Enterprise Edition**
- [Adjust license upload page style](gitlab-org/gitlab@a224cdf8d9c3a8252f1853b3fd6a3365d49ae163) ([merge request](gitlab-org/gitlab!77670)) **GitLab Enterprise Edition**
- [Pass formats explicitly when rendering html](gitlab-org/gitlab@29f03fb2ba7dd9590b95b3b457160ca81b50fe5a) by @edith007 ([merge request](gitlab-org/gitlab!75772))
- [Remove index_merge_requests_on_title index from merge_requests table](gitlab-org/gitlab@ffa845bf5d480a528a7183beeb4bf536465cf9a3) by @edith007 ([merge request](gitlab-org/gitlab!75823))
- [Improve 'Add an SSH key' page](gitlab-org/gitlab@2a2596f2d7ea8e2afa151da430c2061193bd31e3) ([merge request](gitlab-org/gitlab!77403))
- [Fix Rails/SaveBang offenses](gitlab-org/gitlab@de123aba96869395eb4878d00947fcb35f27306a) by @edith007 ([merge request](gitlab-org/gitlab!75929)) **GitLab Enterprise Edition**
- [Remove "show_relevant_approval_rule_approvers" feature flag](gitlab-org/gitlab@afcfaa8cef0c35ba907fd54c6c4188b621fa3f0d) ([merge request](gitlab-org/gitlab!77227))
- [Cleanup pipeline logger feature flags](gitlab-org/gitlab@ec525e62a32e70c12b7e773c072fd645f2f8975f) ([merge request](gitlab-org/gitlab!77973))
- [Remove the dast_view_scans feature flag](gitlab-org/gitlab@0d05f8de936646d95d4d5fa4c60a24014701e57e) ([merge request](gitlab-org/gitlab!77672)) **GitLab Enterprise Edition**
- [Refactor all the specs to use `:integration` rather than `:service`](gitlab-org/gitlab@2930cf7c19308df5524b2bb431e02827a77cf73e) by @edith007 ([merge request](gitlab-org/gitlab!75997))
- [Fix Gitlab/DelegatePredicateMethods offenses](gitlab-org/gitlab@223ebf2c17861e2c4adbee2b00ffb2b36b45277a) by @edith007 ([merge request](gitlab-org/gitlab!76007)) **GitLab Enterprise Edition**
- [Remove foreign key constraint ci_runner_namespaces.namespace_id](gitlab-org/gitlab@2bed6a32c702a787ef4521c449255d47145b94af) ([merge request](gitlab-org/gitlab!77727))
- [Remove foreign key ci_daily_build_group_report_results.group_id](gitlab-org/gitlab@d801789b2ebb064386366bd3673124899af3b5ba) ([merge request](gitlab-org/gitlab!77721))
- [Deprecate agent token deletion mutation](gitlab-org/gitlab@fd65575598150ac1a23da513d7ab3aaadc2cc2d2) ([merge request](gitlab-org/gitlab!77837))
- [Use an enum for agent token statuses](gitlab-org/gitlab@2f6db027701195d978bd8238bb55d3e3b60c96a8) ([merge request](gitlab-org/gitlab!77735))
- [Remove foreign key ci_pending_builds.namespace_id](gitlab-org/gitlab@668cc33add3476588f83d12e959fd293f9432709) ([merge request](gitlab-org/gitlab!77724))
- [Pass formats explicitly when rendering .md file](gitlab-org/gitlab@7b068a4d88bfa440e3eeafa811bd7da81e5397b8) by @edith007 ([merge request](gitlab-org/gitlab!75778)) **GitLab Enterprise Edition**
- [Raise custom errors when backup creation fails](gitlab-org/gitlab@5689d89da7ceeff03b75db174f898aca9df7fe0c) ([merge request](gitlab-org/gitlab!76754))
- [Pass formats explicitly when rendering .md file](gitlab-org/gitlab@7360983df1c4bd9ce5ea4c0198db7675f0c786e8) by @edith007 ([merge request](gitlab-org/gitlab!75777)) **GitLab Enterprise Edition**
- [Use design system badges for project domains](gitlab-org/gitlab@62e5e7b6b7814d131337f24488bd059a9935c292) ([merge request](gitlab-org/gitlab!77613))
- [Add package file status attribute](gitlab-org/gitlab@e7420d284fafa321cfe3d81d12cadd028f312019) ([merge request](gitlab-org/gitlab!76767))
- [Remove foreign key ci_minutes_additional_packs.namespace_id](gitlab-org/gitlab@aff84c0895e16483554a5aaa19dbc5bd459c2d7a) ([merge request](gitlab-org/gitlab!77550))
- [Remove foreign key ci_group_variables.group_id as we have loose fK](gitlab-org/gitlab@ed2adc84f919c11193be49b2040892a087973e93) ([merge request](gitlab-org/gitlab!77494))
- [Remove feature flag `ff_limit_ssh_key_lifetime`](gitlab-org/gitlab@23e9f7c0bd53915b92f82e735f6463956478cf77) ([merge request](gitlab-org/gitlab!77568))
- [Cleanup after DropInvalidSecurityFindings migration](gitlab-org/gitlab@f8059937c176a19c9795dcbf324098f0f800c5a3) ([merge request](gitlab-org/gitlab!75134))
- [Remove foreign key project_pages_metadata.ci_job_artifacts](gitlab-org/gitlab@d2c9fe10b1ce996c5aef14123668b29b32098d5a) ([merge request](gitlab-org/gitlab!76996))
- [Update GitLab Runner Helm Chart to 0.36.0](gitlab-org/gitlab@bff5d0848213999f67c87ce228db0f93a3820290) ([merge request](gitlab-org/gitlab!77082))
- [Fix GraphQL/OrderedArguments offense (Part 3/6)](gitlab-org/gitlab@55c5417e1e56f83a87660852cab73174382e94be) by @KevSlashNull ([merge request](gitlab-org/gitlab!76025))
- [Pass formats explicitly when rendering .html format](gitlab-org/gitlab@2e8f39197824f4e3203a17f4dc64eb7a0164f8f4) by @edith007 ([merge request](gitlab-org/gitlab!75782))
- [Fix Gitlab/DelegatePredicateMethods offenses](gitlab-org/gitlab@518700a11025b0000ff3ce011638417a882612b0) by @edith007 ([merge request](gitlab-org/gitlab!76001))
- [Fix Rails/SaveBang offenses](gitlab-org/gitlab@513b0e1dbdf95ea595e7548ff26929e0be30ce29) by @edith007 ([merge request](gitlab-org/gitlab!75894)) **GitLab Enterprise Edition**
## 14.6.3 (2022-01-18) ## 14.6.3 (2022-01-18)
### Fixed (4 changes) ### Fixed (4 changes)
@ -417,6 +886,10 @@ No changes.
- [Fix OpenStruct use](gitlab-org/gitlab@f8466f5943a1afeabaf9cf781f7804a8df515a0e) by @mehulsharma ([merge request](gitlab-org/gitlab!74702)) - [Fix OpenStruct use](gitlab-org/gitlab@f8466f5943a1afeabaf9cf781f7804a8df515a0e) by @mehulsharma ([merge request](gitlab-org/gitlab!74702))
- [Update Sidekiq to 6.3.1](gitlab-org/gitlab@22e8bc0af656717e56428a7227c467fe08021c66) ([merge request](gitlab-org/gitlab!73973)) - [Update Sidekiq to 6.3.1](gitlab-org/gitlab@22e8bc0af656717e56428a7227c467fe08021c66) ([merge request](gitlab-org/gitlab!73973))
## 14.5.3 (2022-01-11)
No changes.
## 14.5.2 (2021-12-03) ## 14.5.2 (2021-12-03)
No changes. No changes.
@ -959,6 +1432,10 @@ No changes.
- [Add pipeline artifacts and uploads sizes to project REST API](gitlab-org/gitlab@58d66f28faf42ae98ca11ff1ba0bdd9180e988ad) by @guillaume.chauvel ([merge request](gitlab-org/gitlab!72075)) - [Add pipeline artifacts and uploads sizes to project REST API](gitlab-org/gitlab@58d66f28faf42ae98ca11ff1ba0bdd9180e988ad) by @guillaume.chauvel ([merge request](gitlab-org/gitlab!72075))
- [Remove not used parameter from epics finder](gitlab-org/gitlab@49fce172b57b2f376a114726b1dd1900fe36a238) ([merge request](gitlab-org/gitlab!72285)) **GitLab Enterprise Edition** - [Remove not used parameter from epics finder](gitlab-org/gitlab@49fce172b57b2f376a114726b1dd1900fe36a238) ([merge request](gitlab-org/gitlab!72285)) **GitLab Enterprise Edition**
## 14.4.5 (2022-01-11)
No changes.
## 14.4.4 (2021-12-03) ## 14.4.4 (2021-12-03)
No changes. No changes.

View file

@ -1 +1 @@
14.6.5 14.7.4

View file

@ -1 +1 @@
1.49.0 1.51.0

View file

@ -1 +1 @@
13.22.1 13.22.2

37
Gemfile
View file

@ -2,7 +2,7 @@
source 'https://rubygems.org' source 'https://rubygems.org'
gem 'rails', '~> 6.1.4.1' gem 'rails', '~> 6.1.4.4'
gem 'bootsnap', '~> 1.9.1', require: false gem 'bootsnap', '~> 1.9.1', require: false
@ -50,7 +50,7 @@ gem 'omniauth-shibboleth', '~> 1.3.0'
gem 'omniauth-twitter', '~> 1.4' gem 'omniauth-twitter', '~> 1.4'
gem 'omniauth_crowd', '~> 2.4.0' gem 'omniauth_crowd', '~> 2.4.0'
gem 'omniauth-authentiq', '~> 0.3.3' gem 'omniauth-authentiq', '~> 0.3.3'
gem 'gitlab-omniauth-openid-connect', '~> 0.8.0', require: 'omniauth_openid_connect' gem 'gitlab-omniauth-openid-connect', '~> 0.9.0', require: 'omniauth_openid_connect'
gem 'omniauth-salesforce', '~> 1.0.5' gem 'omniauth-salesforce', '~> 1.0.5'
gem 'omniauth-atlassian-oauth2', '~> 0.2.0' gem 'omniauth-atlassian-oauth2', '~> 0.2.0'
gem 'rack-oauth2', '~> 1.16.0' gem 'rack-oauth2', '~> 1.16.0'
@ -74,7 +74,7 @@ gem 'u2f', '~> 0.2.1'
gem 'validates_hostname', '~> 1.0.11' gem 'validates_hostname', '~> 1.0.11'
gem 'rubyzip', '~> 2.0.0', require: 'zip' gem 'rubyzip', '~> 2.0.0', require: 'zip'
# GitLab Pages letsencrypt support # GitLab Pages letsencrypt support
gem 'acme-client', '~> 2.0', '>= 2.0.6' gem 'acme-client', '~> 2.0', '>= 2.0.9'
# Browser detection # Browser detection
gem 'browser', '~> 4.2' gem 'browser', '~> 4.2'
@ -98,10 +98,7 @@ gem 'rack-cors', '~> 1.0.6', require: 'rack/cors'
# GraphQL API # GraphQL API
gem 'graphql', '~> 1.11.10' gem 'graphql', '~> 1.11.10'
# NOTE: graphiql-rails v1.5+ doesn't work: https://gitlab.com/gitlab-org/gitlab/issues/31771 gem 'graphiql-rails', '~> 1.8'
# TODO: remove app/views/graphiql/rails/editors/show.html.erb when https://github.com/rmosolgo/graphiql-rails/pull/71 is released:
# https://gitlab.com/gitlab-org/gitlab/issues/31747
gem 'graphiql-rails', '~> 1.4.10'
gem 'apollo_upload_server', '~> 2.1.0' gem 'apollo_upload_server', '~> 2.1.0'
gem 'graphql-docs', '~> 1.6.0', group: [:development, :test] gem 'graphql-docs', '~> 1.6.0', group: [:development, :test]
gem 'graphlient', '~> 0.4.0' # Used by BulkImport feature (group::import) gem 'graphlient', '~> 0.4.0' # Used by BulkImport feature (group::import)
@ -149,6 +146,7 @@ gem 'aws-sdk-core', '~> 3'
gem 'aws-sdk-cloudformation', '~> 1' gem 'aws-sdk-cloudformation', '~> 1'
gem 'aws-sdk-s3', '~> 1' gem 'aws-sdk-s3', '~> 1'
gem 'faraday_middleware-aws-sigv4', '~>0.3.0' gem 'faraday_middleware-aws-sigv4', '~>0.3.0'
gem 'typhoeus', '~> 1.4.0' # Used with Elasticsearch to support http keep-alive connections
# Markdown and HTML processing # Markdown and HTML processing
gem 'html-pipeline', '~> 2.13.2' gem 'html-pipeline', '~> 2.13.2'
@ -169,7 +167,7 @@ gem 'asciidoctor-kroki', '~> 0.5.0', require: false
gem 'rouge', '~> 3.27.0' gem 'rouge', '~> 3.27.0'
gem 'truncato', '~> 0.7.11' gem 'truncato', '~> 0.7.11'
gem 'bootstrap_form', '~> 4.2.0' gem 'bootstrap_form', '~> 4.2.0'
gem 'nokogiri', '~> 1.11.4' gem 'nokogiri', '~> 1.12'
gem 'escape_utils', '~> 1.1' gem 'escape_utils', '~> 1.1'
# Calendar rendering # Calendar rendering
@ -193,12 +191,12 @@ end
# State machine # State machine
gem 'state_machines-activerecord', '~> 0.8.0' gem 'state_machines-activerecord', '~> 0.8.0'
# Issue tags # CI domain tags
gem 'acts-as-taggable-on', '~> 8.1' gem 'acts-as-taggable-on', '~> 9.0'
# Background jobs # Background jobs
gem 'sidekiq', '~> 6.3' gem 'sidekiq', '~> 6.3'
gem 'sidekiq-cron', '~> 1.0' gem 'sidekiq-cron', '~> 1.2'
gem 'redis-namespace', '~> 1.8.1' gem 'redis-namespace', '~> 1.8.1'
gem 'gitlab-sidekiq-fetcher', '0.8.0', require: 'sidekiq-reliable-fetch' gem 'gitlab-sidekiq-fetcher', '0.8.0', require: 'sidekiq-reliable-fetch'
@ -263,7 +261,7 @@ gem 'ruby-fogbugz', '~> 0.2.1'
gem 'kubeclient', '~> 4.9.2' gem 'kubeclient', '~> 4.9.2'
# Sanitize user input # Sanitize user input
gem 'sanitize', '~> 5.2.1' gem 'sanitize', '~> 6.0'
gem 'babosa', '~> 1.0.4' gem 'babosa', '~> 1.0.4'
# Sanitizes SVG input # Sanitizes SVG input
@ -276,7 +274,7 @@ gem 'licensee', '~> 9.14.1'
gem 'charlock_holmes', '~> 0.7.7' gem 'charlock_holmes', '~> 0.7.7'
# Detect mime content type from content # Detect mime content type from content
gem 'ruby-magic', '~> 0.4' gem 'ruby-magic', '~> 0.5'
# Faster blank # Faster blank
gem 'fast_blank' gem 'fast_blank'
@ -312,7 +310,7 @@ gem 'pg_query', '~> 2.1'
gem 'premailer-rails', '~> 1.10.3' gem 'premailer-rails', '~> 1.10.3'
# LabKit: Tracing and Correlation # LabKit: Tracing and Correlation
gem 'gitlab-labkit', '~> 0.21.1' gem 'gitlab-labkit', '~> 0.21.3'
# Thrift is a dependency of gitlab-labkit, we want a version higher than 0.14.0 # Thrift is a dependency of gitlab-labkit, we want a version higher than 0.14.0
# because of https://gitlab.com/gitlab-org/gitlab/-/issues/321900 # because of https://gitlab.com/gitlab-org/gitlab/-/issues/321900
gem 'thrift', '>= 0.14.0' gem 'thrift', '>= 0.14.0'
@ -394,8 +392,6 @@ group :development, :test do
gem 'parallel', '~> 1.19', require: false gem 'parallel', '~> 1.19', require: false
gem 'rblineprof', '~> 0.3.6', platform: :mri, require: false
gem 'test_file_finder', '~> 0.1.3' gem 'test_file_finder', '~> 0.1.3'
end end
@ -443,7 +439,8 @@ end
gem 'octokit', '~> 4.15' gem 'octokit', '~> 4.15'
# https://gitlab.com/gitlab-org/gitlab/issues/207207 # Updating this gem version here is deprecated. See:
# https://docs.gitlab.com/ee/development/emails.html#mailroom-gem-updates
gem 'gitlab-mail_room', '~> 0.0.9', require: 'mail_room' gem 'gitlab-mail_room', '~> 0.0.9', require: 'mail_room'
gem 'email_reply_trimmer', '~> 0.1' gem 'email_reply_trimmer', '~> 0.1'
@ -483,14 +480,14 @@ end
gem 'spamcheck', '~> 0.1.0' gem 'spamcheck', '~> 0.1.0'
# Gitaly GRPC protocol definitions # Gitaly GRPC protocol definitions
gem 'gitaly', '~> 14.4.0.pre.rc43' gem 'gitaly', '~> 14.6.0.pre.rc1'
# KAS GRPC protocol definitions # KAS GRPC protocol definitions
gem 'kas-grpc', '~> 0.0.2' gem 'kas-grpc', '~> 0.0.2'
gem 'grpc', '~> 1.30.2' gem 'grpc', '~> 1.42.0'
gem 'google-protobuf', '~> 3.17.1' gem 'google-protobuf', '~> 3.19.0'
gem 'toml-rb', '~> 2.0' gem 'toml-rb', '~> 2.0'

View file

@ -9,72 +9,72 @@ GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
RedCloth (4.3.2) RedCloth (4.3.2)
acme-client (2.0.6) acme-client (2.0.9)
faraday (>= 0.17, < 2.0.0) faraday (>= 0.17, < 2.0.0)
actioncable (6.1.4.1) actioncable (6.1.4.4)
actionpack (= 6.1.4.1) actionpack (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailbox (6.1.4.1) actionmailbox (6.1.4.4)
actionpack (= 6.1.4.1) actionpack (= 6.1.4.4)
activejob (= 6.1.4.1) activejob (= 6.1.4.4)
activerecord (= 6.1.4.1) activerecord (= 6.1.4.4)
activestorage (= 6.1.4.1) activestorage (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
mail (>= 2.7.1) mail (>= 2.7.1)
actionmailer (6.1.4.1) actionmailer (6.1.4.4)
actionpack (= 6.1.4.1) actionpack (= 6.1.4.4)
actionview (= 6.1.4.1) actionview (= 6.1.4.4)
activejob (= 6.1.4.1) activejob (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (6.1.4.1) actionpack (6.1.4.4)
actionview (= 6.1.4.1) actionview (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
rack (~> 2.0, >= 2.0.9) rack (~> 2.0, >= 2.0.9)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0)
actiontext (6.1.4.1) actiontext (6.1.4.4)
actionpack (= 6.1.4.1) actionpack (= 6.1.4.4)
activerecord (= 6.1.4.1) activerecord (= 6.1.4.4)
activestorage (= 6.1.4.1) activestorage (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (6.1.4.1) actionview (6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (6.1.4.1) activejob (6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (6.1.4.1) activemodel (6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
activerecord (6.1.4.1) activerecord (6.1.4.4)
activemodel (= 6.1.4.1) activemodel (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
activerecord-explain-analyze (0.1.0) activerecord-explain-analyze (0.1.0)
activerecord (>= 4) activerecord (>= 4)
pg pg
activestorage (6.1.4.1) activestorage (6.1.4.4)
actionpack (= 6.1.4.1) actionpack (= 6.1.4.4)
activejob (= 6.1.4.1) activejob (= 6.1.4.4)
activerecord (= 6.1.4.1) activerecord (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
marcel (~> 1.0.0) marcel (~> 1.0.0)
mini_mime (>= 1.1.0) mini_mime (>= 1.1.0)
activesupport (6.1.4.1) activesupport (6.1.4.4)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
minitest (>= 5.1) minitest (>= 5.1)
tzinfo (~> 2.0) tzinfo (~> 2.0)
zeitwerk (~> 2.3) zeitwerk (~> 2.3)
acts-as-taggable-on (8.1.0) acts-as-taggable-on (9.0.0)
activerecord (>= 5.0, < 6.2) activerecord (>= 6.0, < 7.1)
addressable (2.8.0) addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0) public_suffix (>= 2.0.2, < 5.0)
aes_key_wrap (1.1.0) aes_key_wrap (1.1.0)
@ -124,14 +124,14 @@ GEM
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.1) aws-sigv4 (1.2.1)
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
azure-storage-blob (2.0.1) azure-storage-blob (2.0.3)
azure-storage-common (~> 2.0) azure-storage-common (~> 2.0)
nokogiri (~> 1.11.0.rc2) nokogiri (~> 1, >= 1.10.8)
azure-storage-common (2.0.2) azure-storage-common (2.0.4)
faraday (~> 1.0) faraday (~> 1.0)
faraday_middleware (~> 1.0.0.rc1) faraday_middleware (~> 1.0, >= 1.0.0.rc1)
net-http-persistent (~> 4.0) net-http-persistent (~> 4.0)
nokogiri (~> 1.11.0.rc2) nokogiri (~> 1, >= 1.10.8)
babosa (1.0.4) babosa (1.0.4)
backport (1.2.0) backport (1.2.0)
base32 (0.3.2) base32 (0.3.2)
@ -239,7 +239,6 @@ GEM
danger danger
gitlab (~> 4.2, >= 4.2.0) gitlab (~> 4.2, >= 4.2.0)
database_cleaner (1.7.0) database_cleaner (1.7.0)
debugger-ruby_core_source (1.3.8)
deckar01-task_list (2.3.1) deckar01-task_list (2.3.1)
html-pipeline html-pipeline
declarative (0.0.20) declarative (0.0.20)
@ -333,8 +332,10 @@ GEM
escape_utils (1.2.1) escape_utils (1.2.1)
et-orbi (1.2.1) et-orbi (1.2.1)
tzinfo tzinfo
ethon (0.15.0)
ffi (>= 1.15.0)
eventmachine (1.2.7) eventmachine (1.2.7)
excon (0.71.1) excon (0.90.0)
execjs (2.8.1) execjs (2.8.1)
expression_parser (0.9.0) expression_parser (0.9.0)
extended-markdown-filter (0.6.0) extended-markdown-filter (0.6.0)
@ -450,7 +451,7 @@ GEM
rails (>= 3.2.0) rails (>= 3.2.0)
git (1.7.0) git (1.7.0)
rchardet (~> 1.8) rchardet (~> 1.8)
gitaly (14.4.0.pre.rc43) gitaly (14.6.0.pre.rc1)
grpc (~> 1.0) grpc (~> 1.0)
github-markup (1.7.0) github-markup (1.7.0)
gitlab (4.16.1) gitlab (4.16.1)
@ -472,10 +473,10 @@ GEM
fog-json (~> 1.2.0) fog-json (~> 1.2.0)
mime-types mime-types
ms_rest_azure (~> 0.12.0) ms_rest_azure (~> 0.12.0)
gitlab-labkit (0.21.1) gitlab-labkit (0.21.3)
actionpack (>= 5.0.0, < 7.0.0) actionpack (>= 5.0.0, < 7.0.0)
activesupport (>= 5.0.0, < 7.0.0) activesupport (>= 5.0.0, < 7.0.0)
grpc (~> 1.30.2) grpc (>= 1.37)
jaeger-client (~> 1.1) jaeger-client (~> 1.1)
opentracing (~> 0.4) opentracing (~> 0.4)
pg_query (~> 2.1) pg_query (~> 2.1)
@ -491,7 +492,7 @@ GEM
gitlab-mail_room (0.0.9) gitlab-mail_room (0.0.9)
gitlab-markup (1.8.0) gitlab-markup (1.8.0)
gitlab-net-dns (0.9.1) gitlab-net-dns (0.9.1)
gitlab-omniauth-openid-connect (0.8.0) gitlab-omniauth-openid-connect (0.9.1)
addressable (~> 2.7) addressable (~> 2.7)
omniauth (~> 1.9) omniauth (~> 1.9)
openid_connect (~> 1.2) openid_connect (~> 1.2)
@ -511,7 +512,7 @@ GEM
omniauth (~> 1.3) omniauth (~> 1.3)
pyu-ruby-sasl (>= 0.0.3.3, < 0.1) pyu-ruby-sasl (>= 0.0.3.3, < 0.1)
rubyntlm (~> 0.5) rubyntlm (~> 0.5)
globalid (0.5.2) globalid (1.0.0)
activesupport (>= 5.0) activesupport (>= 5.0)
gon (6.4.0) gon (6.4.0)
actionpack (>= 3.0.20) actionpack (>= 3.0.20)
@ -529,8 +530,8 @@ GEM
signet (~> 0.12) signet (~> 0.12)
google-cloud-env (1.5.0) google-cloud-env (1.5.0)
faraday (>= 0.17.3, < 2.0) faraday (>= 0.17.3, < 2.0)
google-protobuf (3.17.3) google-protobuf (3.19.1)
googleapis-common-protos-types (1.1.0) googleapis-common-protos-types (1.3.0)
google-protobuf (~> 3.14) google-protobuf (~> 3.14)
googleauth (0.14.0) googleauth (0.14.0)
faraday (>= 0.17.3, < 2.0) faraday (>= 0.17.3, < 2.0)
@ -559,7 +560,7 @@ GEM
grape_logging (1.8.3) grape_logging (1.8.3)
grape grape
rack rack
graphiql-rails (1.4.10) graphiql-rails (1.8.0)
railties railties
sprockets-rails sprockets-rails
graphlient (0.4.0) graphlient (0.4.0)
@ -578,8 +579,8 @@ GEM
graphql (~> 1.6) graphql (~> 1.6)
html-pipeline (~> 2.8) html-pipeline (~> 2.8)
sass (~> 3.4) sass (~> 3.4)
grpc (1.30.2) grpc (1.42.0)
google-protobuf (~> 3.12) google-protobuf (~> 3.18)
googleapis-common-protos-types (~> 1.0) googleapis-common-protos-types (~> 1.0)
gssapi (1.2.0) gssapi (1.2.0)
ffi (>= 1.0.1) ffi (>= 1.0.1)
@ -739,7 +740,7 @@ GEM
lumberjack (1.2.7) lumberjack (1.2.7)
mail (2.7.1) mail (2.7.1)
mini_mime (>= 0.1.1) mini_mime (>= 0.1.1)
marcel (1.0.1) marcel (1.0.2)
marginalia (1.10.0) marginalia (1.10.0)
actionpack (>= 2.3) actionpack (>= 2.3)
activerecord (>= 2.3) activerecord (>= 2.3)
@ -752,7 +753,7 @@ GEM
mini_histogram (0.3.1) mini_histogram (0.3.1)
mini_magick (4.10.1) mini_magick (4.10.1)
mini_mime (1.1.1) mini_mime (1.1.1)
mini_portile2 (2.5.3) mini_portile2 (2.6.1)
minitest (5.11.3) minitest (5.11.3)
mixlib-cli (2.1.8) mixlib-cli (2.1.8)
mixlib-config (3.0.9) mixlib-config (3.0.9)
@ -790,11 +791,9 @@ GEM
netrc (0.11.0) netrc (0.11.0)
nio4r (2.5.8) nio4r (2.5.8)
no_proxy_fix (0.1.2) no_proxy_fix (0.1.2)
nokogiri (1.11.7) nokogiri (1.12.5)
mini_portile2 (~> 2.5.0) mini_portile2 (~> 2.6.1)
racc (~> 1.4) racc (~> 1.4)
nokogumbo (2.0.2)
nokogiri (~> 1.8, >= 1.8.4)
notiffany (0.1.3) notiffany (0.1.3)
nenv (~> 0.1) nenv (~> 0.1)
shellany (~> 0.0) shellany (~> 0.0)
@ -887,7 +886,7 @@ GEM
nokogiri (>= 1.4.4) nokogiri (>= 1.4.4)
omniauth (~> 1.0) omniauth (~> 1.0)
open4 (1.3.4) open4 (1.3.4)
openid_connect (1.2.0) openid_connect (1.3.0)
activemodel activemodel
attr_required (>= 1.0.0) attr_required (>= 1.0.0)
json-jwt (>= 1.5.0) json-jwt (>= 1.5.0)
@ -952,7 +951,7 @@ GEM
puma (>= 2.7) puma (>= 2.7)
pyu-ruby-sasl (0.0.3.3) pyu-ruby-sasl (0.0.3.3)
raabro (1.1.6) raabro (1.1.6)
racc (1.5.2) racc (1.6.0)
rack (2.2.3) rack (2.2.3)
rack-accept (0.4.5) rack-accept (0.4.5)
rack (>= 0.4) rack (>= 0.4)
@ -971,20 +970,20 @@ GEM
rack-test (1.1.0) rack-test (1.1.0)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
rack-timeout (0.5.2) rack-timeout (0.5.2)
rails (6.1.4.1) rails (6.1.4.4)
actioncable (= 6.1.4.1) actioncable (= 6.1.4.4)
actionmailbox (= 6.1.4.1) actionmailbox (= 6.1.4.4)
actionmailer (= 6.1.4.1) actionmailer (= 6.1.4.4)
actionpack (= 6.1.4.1) actionpack (= 6.1.4.4)
actiontext (= 6.1.4.1) actiontext (= 6.1.4.4)
actionview (= 6.1.4.1) actionview (= 6.1.4.4)
activejob (= 6.1.4.1) activejob (= 6.1.4.4)
activemodel (= 6.1.4.1) activemodel (= 6.1.4.4)
activerecord (= 6.1.4.1) activerecord (= 6.1.4.4)
activestorage (= 6.1.4.1) activestorage (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
bundler (>= 1.15.0) bundler (>= 1.15.0)
railties (= 6.1.4.1) railties (= 6.1.4.4)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.5) rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1) actionpack (>= 5.0.1.rc1)
@ -998,9 +997,9 @@ GEM
rails-i18n (6.0.0) rails-i18n (6.0.0)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 7) railties (>= 6.0.0, < 7)
railties (6.1.4.1) railties (6.1.4.4)
actionpack (= 6.1.4.1) actionpack (= 6.1.4.4)
activesupport (= 6.1.4.1) activesupport (= 6.1.4.4)
method_source method_source
rake (>= 0.13) rake (>= 0.13)
thor (~> 1.0) thor (~> 1.0)
@ -1009,8 +1008,6 @@ GEM
rb-fsevent (0.10.4) rb-fsevent (0.10.4)
rb-inotify (0.10.1) rb-inotify (0.10.1)
ffi (~> 1.0) ffi (~> 1.0)
rblineprof (0.3.6)
debugger-ruby_core_source (~> 1.3)
rbtrace (0.4.14) rbtrace (0.4.14)
ffi (>= 1.0.6) ffi (>= 1.0.6)
msgpack (>= 0.4.3) msgpack (>= 0.4.3)
@ -1124,8 +1121,8 @@ GEM
rubocop-ast (>= 0.7.1) rubocop-ast (>= 0.7.1)
ruby-fogbugz (0.2.1) ruby-fogbugz (0.2.1)
crack (~> 0.4) crack (~> 0.4)
ruby-magic (0.4.0) ruby-magic (0.5.4)
mini_portile2 (~> 2.5.0) mini_portile2 (~> 2.6)
ruby-prof (1.3.1) ruby-prof (1.3.1)
ruby-progressbar (1.11.0) ruby-progressbar (1.11.0)
ruby-saml (1.13.0) ruby-saml (1.13.0)
@ -1142,10 +1139,9 @@ GEM
safe_yaml (1.0.4) safe_yaml (1.0.4)
safety_net_attestation (0.4.0) safety_net_attestation (0.4.0)
jwt (~> 2.0) jwt (~> 2.0)
sanitize (5.2.1) sanitize (6.0.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.8.0) nokogiri (>= 1.12.0)
nokogumbo (~> 2.0)
sass (3.5.5) sass (3.5.5)
sass-listen (~> 4.0.0) sass-listen (~> 4.0.0)
sass-listen (4.0.0) sass-listen (4.0.0)
@ -1184,7 +1180,7 @@ GEM
connection_pool (>= 2.2.2) connection_pool (>= 2.2.2)
rack (~> 2.0) rack (~> 2.0)
redis (>= 4.2.0) redis (>= 4.2.0)
sidekiq-cron (1.0.4) sidekiq-cron (1.2.0)
fugit (~> 1.1) fugit (~> 1.1)
sidekiq (>= 4.2.1) sidekiq (>= 4.2.1)
signet (0.14.0) signet (0.14.0)
@ -1251,7 +1247,7 @@ GEM
unicode-display_width (>= 1.5, < 3.0) unicode-display_width (>= 1.5, < 3.0)
unicode_utils (~> 1.4) unicode_utils (~> 1.4)
strings-ansi (0.2.0) strings-ansi (0.2.0)
swd (1.2.0) swd (1.3.0)
activesupport (>= 3) activesupport (>= 3)
attr_required (>= 0.0.5) attr_required (>= 0.0.5)
httpclient (>= 2.4) httpclient (>= 2.4)
@ -1311,6 +1307,8 @@ GEM
tty-screen (~> 0.8) tty-screen (~> 0.8)
wisper (~> 2.0) wisper (~> 2.0)
tty-screen (0.8.1) tty-screen (0.8.1)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (2.0.4) tzinfo (2.0.4)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
u2f (0.2.1) u2f (0.2.1)
@ -1358,7 +1356,7 @@ GEM
safety_net_attestation (~> 0.4.0) safety_net_attestation (~> 0.4.0)
securecompare (~> 1.0) securecompare (~> 1.0)
tpm-key_attestation (~> 0.9.0) tpm-key_attestation (~> 0.9.0)
webfinger (1.1.0) webfinger (1.2.0)
activesupport activesupport
httpclient (>= 2.4) httpclient (>= 2.4)
webmock (3.9.1) webmock (3.9.1)
@ -1381,16 +1379,16 @@ GEM
nokogiri (~> 1.8) nokogiri (~> 1.8)
yajl-ruby (1.4.1) yajl-ruby (1.4.1)
yard (0.9.26) yard (0.9.26)
zeitwerk (2.5.1) zeitwerk (2.5.3)
PLATFORMS PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
RedCloth (~> 4.3.2) RedCloth (~> 4.3.2)
acme-client (~> 2.0, >= 2.0.6) acme-client (~> 2.0, >= 2.0.9)
activerecord-explain-analyze (~> 0.1) activerecord-explain-analyze (~> 0.1)
acts-as-taggable-on (~> 8.1) acts-as-taggable-on (~> 9.0)
addressable (~> 2.8) addressable (~> 2.8)
akismet (~> 3.0) akismet (~> 3.0)
apollo_upload_server (~> 2.1.0) apollo_upload_server (~> 2.1.0)
@ -1472,36 +1470,36 @@ DEPENDENCIES
gettext (~> 3.3) gettext (~> 3.3)
gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails (~> 1.8.0)
gettext_i18n_rails_js (~> 1.3) gettext_i18n_rails_js (~> 1.3)
gitaly (~> 14.4.0.pre.rc43) gitaly (~> 14.6.0.pre.rc1)
github-markup (~> 1.7.0) github-markup (~> 1.7.0)
gitlab-chronic (~> 0.10.5) gitlab-chronic (~> 0.10.5)
gitlab-dangerfiles (~> 2.6.1) gitlab-dangerfiles (~> 2.6.1)
gitlab-experiment (~> 0.6.5) gitlab-experiment (~> 0.6.5)
gitlab-fog-azure-rm (~> 1.2.0) gitlab-fog-azure-rm (~> 1.2.0)
gitlab-labkit (~> 0.21.1) gitlab-labkit (~> 0.21.3)
gitlab-license (~> 2.0) gitlab-license (~> 2.0)
gitlab-license_finder (~> 6.0) gitlab-license_finder (~> 6.0)
gitlab-mail_room (~> 0.0.9) gitlab-mail_room (~> 0.0.9)
gitlab-markup (~> 1.8.0) gitlab-markup (~> 1.8.0)
gitlab-net-dns (~> 0.9.1) gitlab-net-dns (~> 0.9.1)
gitlab-omniauth-openid-connect (~> 0.8.0) gitlab-omniauth-openid-connect (~> 0.9.0)
gitlab-sidekiq-fetcher (= 0.8.0) gitlab-sidekiq-fetcher (= 0.8.0)
gitlab-styles (~> 6.6.0) gitlab-styles (~> 6.6.0)
gitlab_chronic_duration (~> 0.10.6.2) gitlab_chronic_duration (~> 0.10.6.2)
gitlab_omniauth-ldap (~> 2.1.1) gitlab_omniauth-ldap (~> 2.1.1)
gon (~> 6.4.0) gon (~> 6.4.0)
google-api-client (~> 0.33) google-api-client (~> 0.33)
google-protobuf (~> 3.17.1) google-protobuf (~> 3.19.0)
gpgme (~> 2.0.19) gpgme (~> 2.0.19)
grape (~> 1.5.2) grape (~> 1.5.2)
grape-entity (~> 0.10.0) grape-entity (~> 0.10.0)
grape-path-helpers (~> 1.7.0) grape-path-helpers (~> 1.7.0)
grape_logging (~> 1.7) grape_logging (~> 1.7)
graphiql-rails (~> 1.4.10) graphiql-rails (~> 1.8)
graphlient (~> 0.4.0) graphlient (~> 0.4.0)
graphql (~> 1.11.10) graphql (~> 1.11.10)
graphql-docs (~> 1.6.0) graphql-docs (~> 1.6.0)
grpc (~> 1.30.2) grpc (~> 1.42.0)
gssapi gssapi
guard-rspec guard-rspec
haml_lint (~> 0.36.0) haml_lint (~> 0.36.0)
@ -1545,7 +1543,7 @@ DEPENDENCIES
net-ldap (~> 0.16.3) net-ldap (~> 0.16.3)
net-ntp net-ntp
net-ssh (~> 6.0) net-ssh (~> 6.0)
nokogiri (~> 1.11.4) nokogiri (~> 1.12)
oauth2 (~> 1.4) oauth2 (~> 1.4)
octokit (~> 4.15) octokit (~> 4.15)
ohai (~> 16.10) ohai (~> 16.10)
@ -1589,11 +1587,10 @@ DEPENDENCIES
rack-oauth2 (~> 1.16.0) rack-oauth2 (~> 1.16.0)
rack-proxy (~> 0.6.0) rack-proxy (~> 0.6.0)
rack-timeout (~> 0.5.1) rack-timeout (~> 0.5.1)
rails (~> 6.1.4.1) rails (~> 6.1.4.4)
rails-controller-testing rails-controller-testing
rails-i18n (~> 6.0) rails-i18n (~> 6.0)
rainbow (~> 3.0) rainbow (~> 3.0)
rblineprof (~> 0.3.6)
rbtrace (~> 0.4) rbtrace (~> 0.4)
rdoc (~> 6.3.2) rdoc (~> 6.3.2)
re2 (~> 1.2.0) re2 (~> 1.2.0)
@ -1613,14 +1610,14 @@ DEPENDENCIES
rspec_junit_formatter rspec_junit_formatter
rspec_profiling (~> 0.0.6) rspec_profiling (~> 0.0.6)
ruby-fogbugz (~> 0.2.1) ruby-fogbugz (~> 0.2.1)
ruby-magic (~> 0.4) ruby-magic (~> 0.5)
ruby-prof (~> 1.3.0) ruby-prof (~> 1.3.0)
ruby-progressbar (~> 1.10) ruby-progressbar (~> 1.10)
ruby-saml (~> 1.13.0) ruby-saml (~> 1.13.0)
ruby_parser (~> 3.15) ruby_parser (~> 3.15)
rubyzip (~> 2.0.0) rubyzip (~> 2.0.0)
rugged (~> 1.2) rugged (~> 1.2)
sanitize (~> 5.2.1) sanitize (~> 6.0)
sassc-rails (~> 2.1.0) sassc-rails (~> 2.1.0)
sd_notify (~> 0.1.0) sd_notify (~> 0.1.0)
seed-fu (~> 2.3.7) seed-fu (~> 2.3.7)
@ -1629,7 +1626,7 @@ DEPENDENCIES
settingslogic (~> 2.0.9) settingslogic (~> 2.0.9)
shoulda-matchers (~> 4.0.1) shoulda-matchers (~> 4.0.1)
sidekiq (~> 6.3) sidekiq (~> 6.3)
sidekiq-cron (~> 1.0) sidekiq-cron (~> 1.2)
simple_po_parser (~> 1.1.2) simple_po_parser (~> 1.1.2)
simplecov (~> 0.18.5) simplecov (~> 0.18.5)
simplecov-cobertura (~> 1.3.1) simplecov-cobertura (~> 1.3.1)
@ -1655,6 +1652,7 @@ DEPENDENCIES
timecop (~> 0.9.1) timecop (~> 0.9.1)
toml-rb (~> 2.0) toml-rb (~> 2.0)
truncato (~> 0.7.11) truncato (~> 0.7.11)
typhoeus (~> 1.4.0)
u2f (~> 0.2.1) u2f (~> 0.2.1)
undercover (~> 0.4.4) undercover (~> 0.4.4)
unf (~> 0.1.4) unf (~> 0.1.4)

View file

@ -121,4 +121,4 @@ Please see [Getting help for GitLab](https://about.gitlab.com/getting-help/) on
## Is it awesome? ## Is it awesome?
[These people](https://twitter.com/gitlab/likes) seem to like it. [These people](https://twitter.com/gitlab/followers) seem to like it.

View file

@ -1 +1 @@
14.6.5 14.7.4

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 387 KiB

After

Width:  |  Height:  |  Size: 386 KiB

View file

@ -109,12 +109,13 @@ export default {
<div v-if="hasDropdownActions" class="gl-p-2"> <div v-if="hasDropdownActions" class="gl-p-2">
<gl-dropdown <gl-dropdown
data-testid="dropdown-toggle" data-testid="dropdown-toggle"
right
:text="$options.i18n.userAdministration" :text="$options.i18n.userAdministration"
:text-sr-only="!showButtonLabels" :text-sr-only="!showButtonLabels"
icon="ellipsis_h" icon="ellipsis_h"
data-qa-selector="user_actions_dropdown_toggle" data-qa-selector="user_actions_dropdown_toggle"
:data-qa-username="user.username" :data-qa-username="user.username"
no-caret
right
> >
<gl-dropdown-section-header>{{ <gl-dropdown-section-header>{{
$options.i18n.userAdministration $options.i18n.userAdministration

View file

@ -31,7 +31,8 @@ export default {
props: { props: {
groupId: { groupId: {
type: Number, type: Number,
required: true, required: false,
default: null,
}, },
groupNamespace: { groupNamespace: {
type: String, type: String,
@ -57,6 +58,11 @@ export default {
required: false, required: false,
default: () => [], default: () => [],
}, },
loadingDefaultProjects: {
type: Boolean,
required: false,
default: false,
},
}, },
data() { data() {
return { return {
@ -111,6 +117,9 @@ export default {
searchTerm() { searchTerm() {
this.search(); this.search();
}, },
defaultProjects(projects) {
this.selectedProjects = [...projects];
},
}, },
mounted() { mounted() {
this.search(); this.search();
@ -202,6 +211,7 @@ export default {
ref="projectsDropdown" ref="projectsDropdown"
class="dropdown dropdown-projects" class="dropdown dropdown-projects"
toggle-class="gl-shadow-none" toggle-class="gl-shadow-none"
:loading="loadingDefaultProjects"
:show-clear-all="hasSelectedProjects" :show-clear-all="hasSelectedProjects"
show-highlighted-items-title show-highlighted-items-title
highlighted-items-title-class="gl-p-3" highlighted-items-title-class="gl-p-3"
@ -209,6 +219,7 @@ export default {
@hide="onHide" @hide="onHide"
> >
<template #button-content> <template #button-content>
<gl-loading-icon v-if="loadingDefaultProjects" class="gl-mr-2" />
<div class="gl-display-flex gl-flex-grow-1"> <div class="gl-display-flex gl-flex-grow-1">
<gl-avatar <gl-avatar
v-if="isOnlyOneProjectSelected" v-if="isOnlyOneProjectSelected"

View file

@ -19,13 +19,7 @@ export function publishPackage(
status: 'default', status: 'default',
}; };
const formData = new FormData(); return axios.put(url, files[0], {
formData.append('file', files[0]);
return axios.put(url, formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
params: Object.assign(defaults, options), params: Object.assign(defaults, options),
...axiosOptions, ...axiosOptions,
}); });

View file

@ -29,7 +29,8 @@ class CopyCodeButton extends HTMLElement {
} }
function addCodeButton() { function addCodeButton() {
[...document.querySelectorAll('pre.code.js-syntax-highlight')] [...document.querySelectorAll('pre.code.js-syntax-highlight:not(.content-editor-code-block)')]
.filter((el) => el.getAttribute('lang') !== 'mermaid')
.filter((el) => !el.closest('.js-markdown-code')) .filter((el) => !el.closest('.js-markdown-code'))
.forEach((el) => { .forEach((el) => {
const copyCodeEl = document.createElement('copy-code'); const copyCodeEl = document.createElement('copy-code');

View file

@ -1,7 +1,13 @@
import Clipboard from 'clipboard'; import ClipboardJS from 'clipboard';
import $ from 'jquery'; import $ from 'jquery';
import { sprintf, __ } from '~/locale';
import { fixTitle, add, show, once } from '~/tooltips'; import { parseBoolean } from '~/lib/utils/common_utils';
import { __ } from '~/locale';
import { fixTitle, add, show, hide, once } from '~/tooltips';
const CLIPBOARD_SUCCESS_EVENT = 'clipboard-success';
const CLIPBOARD_ERROR_EVENT = 'clipboard-error';
const I18N_ERROR_MESSAGE = __('Copy failed. Please manually copy the value.');
function showTooltip(target, title) { function showTooltip(target, title) {
const { title: originalTitle } = target.dataset; const { title: originalTitle } = target.dataset;
@ -9,20 +15,31 @@ function showTooltip(target, title) {
once('hidden', (tooltip) => { once('hidden', (tooltip) => {
if (tooltip.target === target) { if (tooltip.target === target) {
target.setAttribute('title', originalTitle); target.setAttribute('title', originalTitle);
target.setAttribute('aria-label', originalTitle);
fixTitle(target); fixTitle(target);
} }
}); });
target.setAttribute('title', title); target.setAttribute('title', title);
target.setAttribute('aria-label', title);
fixTitle(target); fixTitle(target);
show(target); show(target);
setTimeout(() => target.blur(), 1000); setTimeout(() => {
hide(target);
}, 1000);
} }
function genericSuccess(e) { function genericSuccess(e) {
// Clear the selection and blur the trigger so it loses its border // Clear the selection
e.clearSelection(); e.clearSelection();
e.trigger.focus();
e.trigger.dispatchEvent(new Event(CLIPBOARD_SUCCESS_EVENT));
const { clipboardHandleTooltip = true } = e.trigger.dataset;
if (parseBoolean(clipboardHandleTooltip)) {
// Update tooltip
showTooltip(e.trigger, __('Copied')); showTooltip(e.trigger, __('Copied'));
}
} }
/** /**
@ -30,17 +47,16 @@ function genericSuccess(e) {
* See http://clipboardjs.com/#browser-support * See http://clipboardjs.com/#browser-support
*/ */
function genericError(e) { function genericError(e) {
let key; e.trigger.dispatchEvent(new Event(CLIPBOARD_ERROR_EVENT));
if (/Mac/i.test(navigator.userAgent)) {
key = '&#8984;'; // Command const { clipboardHandleTooltip = true } = e.trigger.dataset;
} else { if (parseBoolean(clipboardHandleTooltip)) {
key = 'Ctrl'; showTooltip(e.trigger, I18N_ERROR_MESSAGE);
} }
showTooltip(e.trigger, sprintf(__(`Press %{key}-C to copy`), { key }));
} }
export default function initCopyToClipboard() { export default function initCopyToClipboard() {
const clipboard = new Clipboard('[data-clipboard-target], [data-clipboard-text]'); const clipboard = new ClipboardJS('[data-clipboard-target], [data-clipboard-text]');
clipboard.on('success', genericSuccess); clipboard.on('success', genericSuccess);
clipboard.on('error', genericError); clipboard.on('error', genericError);
@ -74,6 +90,8 @@ export default function initCopyToClipboard() {
clipboardData.setData('text/plain', json.text); clipboardData.setData('text/plain', json.text);
clipboardData.setData('text/x-gfm', json.gfm); clipboardData.setData('text/x-gfm', json.gfm);
}); });
return clipboard;
} }
/** /**
@ -89,3 +107,5 @@ export function clickCopyToClipboardButton(btnElement) {
btnElement.click(); btnElement.click();
} }
export { CLIPBOARD_SUCCESS_EVENT, CLIPBOARD_ERROR_EVENT, I18N_ERROR_MESSAGE };

View file

@ -4,6 +4,7 @@ import initUserPopovers from '../../user_popovers';
import highlightCurrentUser from './highlight_current_user'; import highlightCurrentUser from './highlight_current_user';
import renderMath from './render_math'; import renderMath from './render_math';
import renderMermaid from './render_mermaid'; import renderMermaid from './render_mermaid';
import renderSandboxedMermaid from './render_sandboxed_mermaid';
import renderMetrics from './render_metrics'; import renderMetrics from './render_metrics';
// Render GitLab flavoured Markdown // Render GitLab flavoured Markdown
@ -13,7 +14,11 @@ import renderMetrics from './render_metrics';
$.fn.renderGFM = function renderGFM() { $.fn.renderGFM = function renderGFM() {
syntaxHighlight(this.find('.js-syntax-highlight').get()); syntaxHighlight(this.find('.js-syntax-highlight').get());
renderMath(this.find('.js-render-math')); renderMath(this.find('.js-render-math'));
if (gon.features?.sandboxedMermaid) {
renderSandboxedMermaid(this.find('.js-render-mermaid'));
} else {
renderMermaid(this.find('.js-render-mermaid')); renderMermaid(this.find('.js-render-mermaid'));
}
highlightCurrentUser(this.find('.gfm-project_member').get()); highlightCurrentUser(this.find('.gfm-project_member').get());
initUserPopovers(this.find('.js-user-link').get()); initUserPopovers(this.find('.js-user-link').get());

View file

@ -0,0 +1,234 @@
import $ from 'jquery';
import { once, countBy } from 'lodash';
import { __ } from '~/locale';
import {
getBaseURL,
relativePathToAbsolute,
setUrlParams,
joinPaths,
} from '~/lib/utils/url_utility';
import { darkModeEnabled } from '~/lib/utils/color_utils';
import { setAttributes } from '~/lib/utils/dom_utils';
// Renders diagrams and flowcharts from text using Mermaid in any element with the
// `js-render-mermaid` class.
//
// Example markup:
//
// <pre class="js-render-mermaid">
// graph TD;
// A-- > B;
// A-- > C;
// B-- > D;
// C-- > D;
// </pre>
//
const SANDBOX_FRAME_PATH = '/-/sandbox/mermaid';
// This is an arbitrary number; Can be iterated upon when suitable.
const MAX_CHAR_LIMIT = 2000;
// Max # of mermaid blocks that can be rendered in a page.
const MAX_MERMAID_BLOCK_LIMIT = 50;
// Max # of `&` allowed in Chaining of links syntax
const MAX_CHAINING_OF_LINKS_LIMIT = 30;
const BUFFER_IFRAME_HEIGHT = 10;
// Keep a map of mermaid blocks we've already rendered.
const elsProcessingMap = new WeakMap();
let renderedMermaidBlocks = 0;
// Pages without any restrictions on mermaid rendering
const PAGES_WITHOUT_RESTRICTIONS = [
// Group wiki
'groups:wikis:show',
'groups:wikis:edit',
'groups:wikis:create',
// Project wiki
'projects:wikis:show',
'projects:wikis:edit',
'projects:wikis:create',
// Project files
'projects:show',
'projects:blob:show',
];
function shouldLazyLoadMermaidBlock(source) {
/**
* If source contains `&`, which means that it might
* contain Chaining of links a new syntax in Mermaid.
*/
if (countBy(source)['&'] > MAX_CHAINING_OF_LINKS_LIMIT) {
return true;
}
return false;
}
function fixElementSource(el) {
// Mermaid doesn't like `<br />` tags, so collapse all like tags into `<br>`, which is parsed correctly.
const source = el.textContent?.replace(/<br\s*\/>/g, '<br>');
// Remove any extra spans added by the backend syntax highlighting.
Object.assign(el, { textContent: source });
return { source };
}
function getSandboxFrameSrc() {
const path = joinPaths(gon.relative_url_root || '', SANDBOX_FRAME_PATH);
if (!darkModeEnabled()) {
return path;
}
const absoluteUrl = relativePathToAbsolute(path, getBaseURL());
return setUrlParams({ darkMode: darkModeEnabled() }, absoluteUrl);
}
function renderMermaidEl(el, source) {
const iframeEl = document.createElement('iframe');
setAttributes(iframeEl, {
src: getSandboxFrameSrc(),
sandbox: 'allow-scripts',
frameBorder: 0,
scrolling: 'no',
width: '100%',
});
// Add the original source into the DOM
// to allow Copy-as-GFM to access it.
const sourceEl = document.createElement('text');
sourceEl.textContent = source;
sourceEl.classList.add('gl-display-none');
const wrapper = document.createElement('div');
wrapper.appendChild(iframeEl);
wrapper.appendChild(sourceEl);
el.closest('pre').replaceWith(wrapper);
// Event Listeners
iframeEl.addEventListener('load', () => {
// Potential risk associated with '*' discussed in below thread
// https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74414#note_735183398
iframeEl.contentWindow.postMessage(source, '*');
});
window.addEventListener(
'message',
(event) => {
if (event.origin !== 'null' || event.source !== iframeEl.contentWindow) {
return;
}
const { h } = event.data;
iframeEl.height = `${h + BUFFER_IFRAME_HEIGHT}px`;
},
false,
);
}
function renderMermaids($els) {
if (!$els.length) return;
const pageName = document.querySelector('body').dataset.page;
// A diagram may have been truncated in search results which will cause errors, so abort the render.
if (pageName === 'search:show') return;
let renderedChars = 0;
$els.each((i, el) => {
// Skipping all the elements which we've already queued in requestIdleCallback
if (elsProcessingMap.has(el)) {
return;
}
const { source } = fixElementSource(el);
/**
* Restrict the rendering to a certain amount of character
* and mermaid blocks to prevent mermaidjs from hanging
* up the entire thread and causing a DoS.
*/
if (
!PAGES_WITHOUT_RESTRICTIONS.includes(pageName) &&
((source && source.length > MAX_CHAR_LIMIT) ||
renderedChars > MAX_CHAR_LIMIT ||
renderedMermaidBlocks >= MAX_MERMAID_BLOCK_LIMIT ||
shouldLazyLoadMermaidBlock(source))
) {
const html = `
<div class="alert gl-alert gl-alert-warning alert-dismissible lazy-render-mermaid-container js-lazy-render-mermaid-container fade show" role="alert">
<div>
<div>
<div class="js-warning-text"></div>
<div class="gl-alert-actions">
<button type="button" class="js-lazy-render-mermaid btn gl-alert-action btn-warning btn-md gl-button">Display</button>
</div>
</div>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
</div>
`;
const $parent = $(el).parent();
if (!$parent.hasClass('lazy-alert-shown')) {
$parent.after(html);
$parent
.siblings()
.find('.js-warning-text')
.text(
__('Warning: Displaying this diagram might cause performance issues on this page.'),
);
$parent.addClass('lazy-alert-shown');
}
return;
}
renderedChars += source.length;
renderedMermaidBlocks += 1;
const requestId = window.requestIdleCallback(() => {
renderMermaidEl(el, source);
});
elsProcessingMap.set(el, requestId);
});
}
const hookLazyRenderMermaidEvent = once(() => {
$(document.body).on('click', '.js-lazy-render-mermaid', function eventHandler() {
const parent = $(this).closest('.js-lazy-render-mermaid-container');
const pre = parent.prev();
const el = pre.find('.js-render-mermaid');
parent.remove();
// sandbox update
const element = el.get(0);
const { source } = fixElementSource(element);
renderMermaidEl(element, source);
});
});
export default function renderMermaid($els) {
if (!$els.length) return;
const visibleMermaids = $els.filter(function filter() {
return $(this).closest('details').length === 0 && $(this).is(':visible');
});
renderMermaids(visibleMermaids);
$els.closest('details').one('toggle', function toggle() {
if (this.open) {
renderMermaids($(this).find('.js-render-mermaid'));
}
});
hookLazyRenderMermaidEvent();
}

View file

@ -124,13 +124,6 @@ const writeButtonSelector = '.js-md-write-button';
lastTextareaPreviewed = null; lastTextareaPreviewed = null;
const markdownToolbar = $('.md-header-toolbar'); const markdownToolbar = $('.md-header-toolbar');
$.fn.setupMarkdownPreview = function () {
const $form = $(this);
$form.find('textarea.markdown-area').on('input', () => {
markdownPreview.hideReferencedUsers($form);
});
};
$(document).on('markdown-preview:show', (e, $form) => { $(document).on('markdown-preview:show', (e, $form) => {
if (!$form) { if (!$form) {
return; return;

View file

@ -1,6 +1,6 @@
import { getLocationHash } from '../lib/utils/url_utility'; import { getLocationHash } from '../lib/utils/url_utility';
const lineNumberRe = /^L[0-9]+/; const lineNumberRe = /^(L|LC)[0-9]+/;
const updateLineNumbersOnBlobPermalinks = (linksToUpdate) => { const updateLineNumbersOnBlobPermalinks = (linksToUpdate) => {
const hash = getLocationHash(); const hash = getLocationHash();

View file

@ -81,7 +81,7 @@ export default {
</blob-filepath> </blob-filepath>
</div> </div>
<div class="gl-display-none gl-sm-display-flex"> <div class="gl-sm-display-flex file-actions">
<viewer-switcher v-if="showViewerSwitcher" v-model="viewer" /> <viewer-switcher v-if="showViewerSwitcher" v-model="viewer" />
<slot name="actions"></slot> <slot name="actions"></slot>

View file

@ -1,4 +1,5 @@
<script> <script>
import { GlBadge } from '@gitlab/ui';
import { numberToHumanSize } from '~/lib/utils/number_utils'; import { numberToHumanSize } from '~/lib/utils/number_utils';
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
import FileIcon from '~/vue_shared/components/file_icon.vue'; import FileIcon from '~/vue_shared/components/file_icon.vue';
@ -7,6 +8,7 @@ export default {
components: { components: {
FileIcon, FileIcon,
ClipboardButton, ClipboardButton,
GlBadge,
}, },
props: { props: {
blob: { blob: {
@ -21,6 +23,9 @@ export default {
gfmCopyText() { gfmCopyText() {
return `\`${this.blob.path}\``; return `\`${this.blob.path}\``;
}, },
showLfsBadge() {
return this.blob.storedExternally && this.blob.externalStorage === 'lfs';
},
}, },
}; };
</script> </script>
@ -37,8 +42,6 @@ export default {
> >
</template> </template>
<small class="mr-2">{{ blobSize }}</small>
<clipboard-button <clipboard-button
:text="blob.path" :text="blob.path"
:gfm="gfmCopyText" :gfm="gfmCopyText"
@ -46,5 +49,9 @@ export default {
category="tertiary" category="tertiary"
css-class="btn-clipboard btn-transparent lh-100 position-static" css-class="btn-clipboard btn-transparent lh-100 position-static"
/> />
<small class="mr-2">{{ blobSize }}</small>
<gl-badge v-if="showLfsBadge">{{ __('LFS') }}</gl-badge>
</div> </div>
</template> </template>

View file

@ -53,6 +53,8 @@ export default {
icon="code" icon="code"
category="primary" category="primary"
variant="default" variant="default"
class="js-blob-viewer-switch-btn"
data-viewer="simple"
@click="switchToViewer($options.SIMPLE_BLOB_VIEWER)" @click="switchToViewer($options.SIMPLE_BLOB_VIEWER)"
/> />
<gl-button <gl-button
@ -63,6 +65,8 @@ export default {
icon="document" icon="document"
category="primary" category="primary"
variant="default" variant="default"
class="js-blob-viewer-switch-btn"
data-viewer="rich"
@click="switchToViewer($options.RICH_BLOB_VIEWER)" @click="switchToViewer($options.RICH_BLOB_VIEWER)"
/> />
</gl-button-group> </gl-button-group>

View file

@ -72,7 +72,7 @@ export default {
data-qa-selector="board_card" data-qa-selector="board_card"
:class="{ :class="{
'multi-select': multiSelectVisible, 'multi-select': multiSelectVisible,
'user-can-drag': isDraggable, 'gl-cursor-grab': isDraggable,
'is-disabled': isDisabled, 'is-disabled': isDisabled,
'is-active': isActive, 'is-active': isActive,
'gl-cursor-not-allowed gl-bg-gray-10': item.isLoading, 'gl-cursor-not-allowed gl-bg-gray-10': item.isLoading,

View file

@ -6,11 +6,12 @@ import SidebarDropdownWidget from 'ee_else_ce/sidebar/components/sidebar_dropdow
import { __, sprintf } from '~/locale'; import { __, sprintf } from '~/locale';
import BoardSidebarTimeTracker from '~/boards/components/sidebar/board_sidebar_time_tracker.vue'; import BoardSidebarTimeTracker from '~/boards/components/sidebar/board_sidebar_time_tracker.vue';
import BoardSidebarTitle from '~/boards/components/sidebar/board_sidebar_title.vue'; import BoardSidebarTitle from '~/boards/components/sidebar/board_sidebar_title.vue';
import { ISSUABLE } from '~/boards/constants'; import { ISSUABLE, INCIDENT } from '~/boards/constants';
import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import SidebarAssigneesWidget from '~/sidebar/components/assignees/sidebar_assignees_widget.vue'; import SidebarAssigneesWidget from '~/sidebar/components/assignees/sidebar_assignees_widget.vue';
import SidebarConfidentialityWidget from '~/sidebar/components/confidential/sidebar_confidentiality_widget.vue'; import SidebarConfidentialityWidget from '~/sidebar/components/confidential/sidebar_confidentiality_widget.vue';
import SidebarDateWidget from '~/sidebar/components/date/sidebar_date_widget.vue'; import SidebarDateWidget from '~/sidebar/components/date/sidebar_date_widget.vue';
import SidebarSeverity from '~/sidebar/components/severity/sidebar_severity.vue';
import SidebarSubscriptionsWidget from '~/sidebar/components/subscriptions/sidebar_subscriptions_widget.vue'; import SidebarSubscriptionsWidget from '~/sidebar/components/subscriptions/sidebar_subscriptions_widget.vue';
import SidebarTodoWidget from '~/sidebar/components/todo_toggle/sidebar_todo_widget.vue'; import SidebarTodoWidget from '~/sidebar/components/todo_toggle/sidebar_todo_widget.vue';
import SidebarLabelsWidget from '~/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue'; import SidebarLabelsWidget from '~/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue';
@ -29,6 +30,7 @@ export default {
SidebarSubscriptionsWidget, SidebarSubscriptionsWidget,
SidebarDropdownWidget, SidebarDropdownWidget,
SidebarTodoWidget, SidebarTodoWidget,
SidebarSeverity,
MountingPortal, MountingPortal,
SidebarWeightWidget: () => SidebarWeightWidget: () =>
import('ee_component/sidebar/components/weight/sidebar_weight_widget.vue'), import('ee_component/sidebar/components/weight/sidebar_weight_widget.vue'),
@ -69,9 +71,15 @@ export default {
isIssuableSidebar() { isIssuableSidebar() {
return this.sidebarType === ISSUABLE; return this.sidebarType === ISSUABLE;
}, },
isIncidentSidebar() {
return this.activeBoardItem.type === INCIDENT;
},
showSidebar() { showSidebar() {
return this.isIssuableSidebar && this.isSidebarOpen; return this.isIssuableSidebar && this.isSidebarOpen;
}, },
sidebarTitle() {
return this.isIncidentSidebar ? __('Incident details') : __('Issue details');
},
fullPath() { fullPath() {
return this.activeBoardItem?.referencePath?.split('#')[0] || ''; return this.activeBoardItem?.referencePath?.split('#')[0] || '';
}, },
@ -138,7 +146,7 @@ export default {
@close="handleClose" @close="handleClose"
> >
<template #title> <template #title>
<h2 class="gl-my-0 gl-font-size-h2 gl-line-height-24">{{ __('Issue details') }}</h2> <h2 class="gl-my-0 gl-font-size-h2 gl-line-height-24">{{ sidebarTitle }}</h2>
</template> </template>
<template #header> <template #header>
<sidebar-todo-widget <sidebar-todo-widget
@ -159,7 +167,7 @@ export default {
@assignees-updated="setAssignees" @assignees-updated="setAssignees"
/> />
<sidebar-dropdown-widget <sidebar-dropdown-widget
v-if="epicFeatureAvailable" v-if="epicFeatureAvailable && !isIncidentSidebar"
:iid="activeBoardItem.iid" :iid="activeBoardItem.iid"
issuable-attribute="epic" issuable-attribute="epic"
:workspace-path="projectPathForActiveIssue" :workspace-path="projectPathForActiveIssue"
@ -178,7 +186,7 @@ export default {
/> />
<template v-if="!glFeatures.iterationCadences"> <template v-if="!glFeatures.iterationCadences">
<sidebar-dropdown-widget <sidebar-dropdown-widget
v-if="iterationFeatureAvailable" v-if="iterationFeatureAvailable && !isIncidentSidebar"
:iid="activeBoardItem.iid" :iid="activeBoardItem.iid"
issuable-attribute="iteration" issuable-attribute="iteration"
:workspace-path="projectPathForActiveIssue" :workspace-path="projectPathForActiveIssue"
@ -190,7 +198,7 @@ export default {
</template> </template>
<template v-else> <template v-else>
<iteration-sidebar-dropdown-widget <iteration-sidebar-dropdown-widget
v-if="iterationFeatureAvailable" v-if="iterationFeatureAvailable && !isIncidentSidebar"
:iid="activeBoardItem.iid" :iid="activeBoardItem.iid"
:workspace-path="projectPathForActiveIssue" :workspace-path="projectPathForActiveIssue"
:attr-workspace-path="groupPathForActiveIssue" :attr-workspace-path="groupPathForActiveIssue"
@ -200,7 +208,7 @@ export default {
/> />
</template> </template>
</div> </div>
<board-sidebar-time-tracker class="swimlanes-sidebar-time-tracker" /> <board-sidebar-time-tracker />
<sidebar-date-widget <sidebar-date-widget
:iid="activeBoardItem.iid" :iid="activeBoardItem.iid"
:full-path="fullPath" :full-path="fullPath"
@ -209,7 +217,6 @@ export default {
/> />
<sidebar-labels-widget <sidebar-labels-widget
class="block labels" class="block labels"
data-testid="sidebar-labels"
:iid="activeBoardItem.iid" :iid="activeBoardItem.iid"
:full-path="projectPathForActiveIssue" :full-path="projectPathForActiveIssue"
:allow-label-remove="allowLabelEdit" :allow-label-remove="allowLabelEdit"
@ -227,8 +234,14 @@ export default {
> >
{{ __('None') }} {{ __('None') }}
</sidebar-labels-widget> </sidebar-labels-widget>
<sidebar-severity
v-if="isIncidentSidebar"
:iid="activeBoardItem.iid"
:project-path="fullPath"
:initial-severity="activeBoardItem.severity"
/>
<sidebar-weight-widget <sidebar-weight-widget
v-if="weightFeatureAvailable" v-if="weightFeatureAvailable && !isIncidentSidebar"
:iid="activeBoardItem.iid" :iid="activeBoardItem.iid"
:full-path="fullPath" :full-path="fullPath"
:issuable-type="issuableType" :issuable-type="issuableType"

View file

@ -6,6 +6,7 @@ import { updateHistory, setUrlParams } from '~/lib/utils/url_utility';
import { __ } from '~/locale'; import { __ } from '~/locale';
import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants'; import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants';
import FilteredSearch from '~/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue'; import FilteredSearch from '~/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue';
import { AssigneeFilterType } from '~/boards/constants';
export default { export default {
i18n: { i18n: {
@ -37,6 +38,7 @@ export default {
authorUsername, authorUsername,
labelName, labelName,
assigneeUsername, assigneeUsername,
assigneeId,
search, search,
milestoneTitle, milestoneTitle,
iterationId, iterationId,
@ -63,6 +65,13 @@ export default {
}); });
} }
if (assigneeId) {
filteredSearchValue.push({
type: 'assignee',
value: { data: assigneeId, operator: '=' },
});
}
if (types) { if (types) {
filteredSearchValue.push({ filteredSearchValue.push({
type: 'type', type: 'type',
@ -211,6 +220,7 @@ export default {
authorUsername, authorUsername,
labelName, labelName,
assigneeUsername, assigneeUsername,
assigneeId,
search, search,
milestoneTitle, milestoneTitle,
types, types,
@ -246,6 +256,7 @@ export default {
author_username: authorUsername, author_username: authorUsername,
'label_name[]': labelName, 'label_name[]': labelName,
assignee_username: assigneeUsername, assignee_username: assigneeUsername,
assignee_id: assigneeId,
milestone_title: milestoneTitle, milestone_title: milestoneTitle,
iteration_id: iterationId, iteration_id: iterationId,
search, search,
@ -295,7 +306,11 @@ export default {
filterParams.authorUsername = filter.value.data; filterParams.authorUsername = filter.value.data;
break; break;
case 'assignee': case 'assignee':
if (Object.values(AssigneeFilterType).includes(filter.value.data)) {
filterParams.assigneeId = filter.value.data;
} else {
filterParams.assigneeUsername = filter.value.data; filterParams.assigneeUsername = filter.value.data;
}
break; break;
case 'type': case 'type':
filterParams.types = filter.value.data; filterParams.types = filter.value.data;

View file

@ -263,7 +263,7 @@ export default {
> >
<h3 <h3
:class="{ :class="{
'user-can-drag': userCanDrag, 'gl-cursor-grab': userCanDrag,
'gl-py-3 gl-h-full': list.collapsed && !isSwimlanesHeader, 'gl-py-3 gl-h-full': list.collapsed && !isSwimlanesHeader,
'gl-border-b-0': list.collapsed || isSwimlanesHeader, 'gl-border-b-0': list.collapsed || isSwimlanesHeader,
'gl-py-2': list.collapsed && isSwimlanesHeader, 'gl-py-2': list.collapsed && isSwimlanesHeader,

View file

@ -150,7 +150,7 @@ export default {
<div class="gl-display-flex gl-w-full gl-justify-content-space-between gl-mt-5"> <div class="gl-display-flex gl-w-full gl-justify-content-space-between gl-mt-5">
<gl-button <gl-button
variant="success" variant="confirm"
size="small" size="small"
data-testid="submit-button" data-testid="submit-button"
:disabled="!title" :disabled="!title"

View file

@ -50,10 +50,13 @@ export const toggleFormEventPrefix = {
issue: 'toggle-issue-form-', issue: 'toggle-issue-form-',
}; };
export const active = 'active';
export const inactiveId = 0; export const inactiveId = 0;
export const ISSUABLE = 'issuable'; export const ISSUABLE = 'issuable';
export const LIST = 'list'; export const LIST = 'list';
export const INCIDENT = 'INCIDENT';
export const flashAnimationDuration = 2000; export const flashAnimationDuration = 2000;
@ -119,6 +122,7 @@ export const FilterFields = {
/* eslint-disable @gitlab/require-i18n-strings */ /* eslint-disable @gitlab/require-i18n-strings */
export const AssigneeFilterType = { export const AssigneeFilterType = {
any: 'Any', any: 'Any',
none: 'None',
}; };
export const MilestoneFilterType = { export const MilestoneFilterType = {

View file

@ -1,7 +1,7 @@
query GroupBoardMilestones($fullPath: ID!, $searchTerm: String) { query GroupBoardMilestones($fullPath: ID!, $searchTerm: String, $state: MilestoneStateEnum) {
group(fullPath: $fullPath) { group(fullPath: $fullPath) {
id id
milestones(includeAncestors: true, searchTitle: $searchTerm) { milestones(includeAncestors: true, searchTitle: $searchTerm, state: $state) {
nodes { nodes {
id id
title title

View file

@ -1,35 +1,6 @@
#import "~/graphql_shared/fragments/milestone.fragment.graphql" #import "~/graphql_shared/fragments/issue.fragment.graphql"
#import "~/graphql_shared/fragments/user.fragment.graphql"
fragment IssueNode on Issue { fragment Issue on Issue {
id id
iid ...IssueNode
title
referencePath: reference(full: true)
dueDate
timeEstimate
totalTimeSpent
humanTimeEstimate
humanTotalTimeSpent
emailsDisabled
confidential
hidden
webUrl
relativePosition
milestone {
...MilestoneFragment
}
assignees {
nodes {
...User
}
}
labels {
nodes {
id
title
color
description
}
}
} }

View file

@ -3,7 +3,7 @@
mutation CreateIssue($input: CreateIssueInput!) { mutation CreateIssue($input: CreateIssueInput!) {
createIssue(input: $input) { createIssue(input: $input) {
issue { issue {
...IssueNode ...Issue
} }
errors errors
} }

View file

@ -21,7 +21,7 @@ mutation issueMoveList(
} }
) { ) {
issue { issue {
...IssueNode ...Issue
} }
errors errors
} }

View file

@ -22,7 +22,7 @@ query BoardListsEE(
issues(first: $first, filters: $filters, after: $after) { issues(first: $first, filters: $filters, after: $after) {
edges { edges {
node { node {
...IssueNode ...Issue
} }
} }
pageInfo { pageInfo {
@ -46,7 +46,7 @@ query BoardListsEE(
issues(first: $first, filters: $filters, after: $after) { issues(first: $first, filters: $filters, after: $after) {
edges { edges {
node { node {
...IssueNode ...Issue
} }
} }
pageInfo { pageInfo {

View file

@ -1,7 +1,7 @@
query ProjectBoardMilestones($fullPath: ID!, $searchTerm: String) { query ProjectBoardMilestones($fullPath: ID!, $searchTerm: String, $state: MilestoneStateEnum) {
project(fullPath: $fullPath) { project(fullPath: $fullPath) {
id id
milestones(searchTitle: $searchTerm, includeAncestors: true) { milestones(searchTitle: $searchTerm, includeAncestors: true, state: $state) {
nodes { nodes {
id id
title title

View file

@ -15,6 +15,7 @@ import {
FilterFields, FilterFields,
ListTypeTitles, ListTypeTitles,
DraggableItemTypes, DraggableItemTypes,
active,
} from 'ee_else_ce/boards/constants'; } from 'ee_else_ce/boards/constants';
import { import {
formatIssueInput, formatIssueInput,
@ -209,6 +210,7 @@ export default {
const variables = { const variables = {
fullPath, fullPath,
searchTerm, searchTerm,
state: active,
}; };
let query; let query;

View file

@ -1,53 +0,0 @@
import $ from 'jquery';
const MODAL_SELECTOR = '#modal-delete-branch';
class DeleteModal {
constructor() {
this.$modal = $(MODAL_SELECTOR);
this.$toggleBtns = $(`[data-target="${MODAL_SELECTOR}"]`);
this.$branchName = $('.js-branch-name', this.$modal);
this.$confirmInput = $('.js-delete-branch-input', this.$modal);
this.$deleteBtn = $('.js-delete-branch', this.$modal);
this.$notMerged = $('.js-not-merged', this.$modal);
this.bindEvents();
}
bindEvents() {
this.$toggleBtns.on('click', this.setModalData.bind(this));
this.$confirmInput.on('input', this.setDeleteDisabled.bind(this));
this.$deleteBtn.on('click', this.setDisableDeleteButton.bind(this));
}
setModalData(e) {
const branchData = e.currentTarget.dataset;
this.branchName = branchData.branchName || '';
this.deletePath = branchData.deletePath || '';
this.isMerged = Boolean(branchData.isMerged);
this.updateModal();
}
setDeleteDisabled(e) {
this.$deleteBtn.attr('disabled', e.currentTarget.value !== this.branchName);
}
setDisableDeleteButton(e) {
if (this.$deleteBtn.is('[disabled]')) {
e.preventDefault();
e.stopPropagation();
return false;
}
return true;
}
updateModal() {
this.$branchName.text(this.branchName);
this.$confirmInput.val('');
this.$deleteBtn.attr('href', this.deletePath);
this.$deleteBtn.attr('disabled', true);
this.$notMerged.toggleClass('hidden', this.isMerged);
}
}
export default DeleteModal;

View file

@ -51,16 +51,7 @@ export default {
TokenTable, TokenTable,
ActivityEvents, ActivityEvents,
}, },
props: { inject: ['agentName', 'projectPath'],
agentName: {
required: true,
type: String,
},
projectPath: {
required: true,
type: String,
},
},
data() { data() {
return { return {
cursor: { cursor: {
@ -135,7 +126,7 @@ export default {
<activity-events :agent-name="agentName" :project-path="projectPath" /> <activity-events :agent-name="agentName" :project-path="projectPath" />
</gl-tab> </gl-tab>
<slot name="ee-security-tab"></slot> <slot name="ee-security-tab" :cluster-agent-id="clusterAgent.id"></slot>
<gl-tab query-param-value="tokens"> <gl-tab query-param-value="tokens">
<template #title> <template #title>

View file

@ -0,0 +1,26 @@
import { IntrospectionFragmentMatcher } from 'apollo-cache-inmemory';
import Vue from 'vue';
import VueApollo from 'vue-apollo';
import createDefaultClient from '~/lib/graphql';
import { vulnerabilityLocationTypes } from '~/graphql_shared/fragment_types/vulnerability_location_types';
Vue.use(VueApollo);
// We create a fragment matcher so that we can create a fragment from an interface
// Without this, Apollo throws a heuristic fragment matcher warning
const fragmentMatcher = new IntrospectionFragmentMatcher({
introspectionQueryResultData: vulnerabilityLocationTypes,
});
const defaultClient = createDefaultClient(
{},
{
cacheConfig: {
fragmentMatcher,
},
},
);
export default new VueApollo({
defaultClient,
});

View file

@ -1,9 +1,6 @@
import Vue from 'vue'; import Vue from 'vue';
import VueApollo from 'vue-apollo';
import createDefaultClient from '~/lib/graphql';
import AgentShowPage from 'ee_else_ce/clusters/agents/components/show.vue'; import AgentShowPage from 'ee_else_ce/clusters/agents/components/show.vue';
import apolloProvider from './graphql/provider';
Vue.use(VueApollo);
export default () => { export default () => {
const el = document.querySelector('#js-cluster-agent-details'); const el = document.querySelector('#js-cluster-agent-details');
@ -12,20 +9,19 @@ export default () => {
return null; return null;
} }
const defaultClient = createDefaultClient(); const { activityEmptyStateImage, agentName, emptyStateSvgPath, projectPath } = el.dataset;
const { agentName, projectPath, activityEmptyStateImage } = el.dataset;
return new Vue({ return new Vue({
el, el,
apolloProvider: new VueApollo({ defaultClient }), apolloProvider,
provide: { agentName, projectPath, activityEmptyStateImage }, provide: {
render(createElement) { activityEmptyStateImage,
return createElement(AgentShowPage, {
props: {
agentName, agentName,
emptyStateSvgPath,
projectPath, projectPath,
}, },
}); render(createElement) {
return createElement(AgentShowPage);
}, },
}); });
}; };

View file

@ -0,0 +1,200 @@
<script>
import {
GlDropdown,
GlDropdownItem,
GlModal,
GlModalDirective,
GlSprintf,
GlFormGroup,
GlFormInput,
} from '@gitlab/ui';
import { s__, __, sprintf } from '~/locale';
import { DELETE_AGENT_MODAL_ID } from '../constants';
import deleteAgent from '../graphql/mutations/delete_agent.mutation.graphql';
import getAgentsQuery from '../graphql/queries/get_agents.query.graphql';
import { removeAgentFromStore } from '../graphql/cache_update';
export default {
i18n: {
dropdownText: __('More options'),
deleteButton: s__('ClusterAgents|Delete agent'),
modalTitle: __('Are you sure?'),
modalBody: s__(
'ClusterAgents|Are you sure you want to delete this agent? You cannot undo this.',
),
modalInputLabel: s__('ClusterAgents|To delete the agent, type %{name} to confirm:'),
modalAction: s__('ClusterAgents|Delete'),
modalCancel: __('Cancel'),
successMessage: s__('ClusterAgents|%{name} successfully deleted'),
defaultError: __('An error occurred. Please try again.'),
},
components: {
GlDropdown,
GlDropdownItem,
GlModal,
GlSprintf,
GlFormGroup,
GlFormInput,
},
directives: {
GlModalDirective,
},
inject: ['projectPath'],
props: {
agent: {
required: true,
type: Object,
validator: (value) => ['id', 'name'].every((prop) => value[prop]),
},
defaultBranchName: {
default: '.noBranch',
required: false,
type: String,
},
maxAgents: {
default: null,
required: false,
type: Number,
},
},
data() {
return {
loading: false,
error: null,
deleteConfirmText: null,
agentName: this.agent.name,
};
},
computed: {
getAgentsQueryVariables() {
return {
defaultBranchName: this.defaultBranchName,
first: this.maxAgents,
last: null,
projectPath: this.projectPath,
};
},
modalId() {
return sprintf(DELETE_AGENT_MODAL_ID, {
agentName: this.agent.name,
});
},
primaryModalProps() {
return {
text: this.$options.i18n.modalAction,
attributes: [
{ disabled: this.loading || this.disableModalSubmit, loading: this.loading },
{ variant: 'danger' },
],
};
},
cancelModalProps() {
return {
text: this.$options.i18n.modalCancel,
attributes: [],
};
},
disableModalSubmit() {
return this.deleteConfirmText !== this.agent.name;
},
},
methods: {
async deleteAgent() {
if (this.disableModalSubmit || this.loading) {
return;
}
this.loading = true;
this.error = null;
try {
const { errors } = await this.deleteAgentMutation();
if (errors.length) {
throw new Error(errors[0]);
}
} catch (error) {
this.error = error?.message || this.$options.i18n.defaultError;
} finally {
this.loading = false;
const successMessage = sprintf(this.$options.i18n.successMessage, { name: this.agentName });
this.$toast.show(this.error || successMessage);
this.$refs.modal.hide();
}
},
deleteAgentMutation() {
return this.$apollo
.mutate({
mutation: deleteAgent,
variables: {
input: {
id: this.agent.id,
},
},
update: (store) => {
const deleteClusterAgent = this.agent;
removeAgentFromStore(
store,
deleteClusterAgent,
getAgentsQuery,
this.getAgentsQueryVariables,
);
},
})
.then(({ data: { clusterAgentDelete } }) => {
return clusterAgentDelete;
});
},
hideModal() {
this.loading = false;
this.error = null;
this.deleteConfirmText = null;
},
},
};
</script>
<template>
<div>
<gl-dropdown
icon="ellipsis_v"
right
:disabled="loading"
:text="$options.i18n.dropdownText"
text-sr-only
category="tertiary"
no-caret
>
<gl-dropdown-item v-gl-modal-directive="modalId">
{{ $options.i18n.deleteButton }}
</gl-dropdown-item>
</gl-dropdown>
<gl-modal
ref="modal"
:modal-id="modalId"
:title="$options.i18n.modalTitle"
:action-primary="primaryModalProps"
:action-cancel="cancelModalProps"
size="sm"
@primary="deleteAgent"
@hide="hideModal"
>
<p>{{ $options.i18n.modalBody }}</p>
<gl-form-group>
<template #label>
<gl-sprintf :message="$options.i18n.modalInputLabel">
<template #name>
<code>{{ agent.name }}</code>
</template>
</gl-sprintf>
</template>
<gl-form-input v-model="deleteConfirmText" @keydown.enter="deleteAgent" />
</gl-form-group>
</gl-modal>
</div>
</template>

View file

@ -1,21 +1,23 @@
<script> <script>
import { import { GlLink, GlTable, GlIcon, GlSprintf, GlTooltip, GlPopover } from '@gitlab/ui';
GlLink, import { s__, __ } from '~/locale';
GlModalDirective,
GlTable,
GlIcon,
GlSprintf,
GlTooltip,
GlPopover,
} from '@gitlab/ui';
import { s__ } from '~/locale';
import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
import timeagoMixin from '~/vue_shared/mixins/timeago'; import timeagoMixin from '~/vue_shared/mixins/timeago';
import { helpPagePath } from '~/helpers/help_page_helper'; import { helpPagePath } from '~/helpers/help_page_helper';
import { INSTALL_AGENT_MODAL_ID, AGENT_STATUSES } from '../constants'; import { AGENT_STATUSES } from '../constants';
import { getAgentConfigPath } from '../clusters_util'; import { getAgentConfigPath } from '../clusters_util';
import AgentOptions from './agent_options.vue';
export default { export default {
i18n: {
nameLabel: s__('ClusterAgents|Name'),
statusLabel: s__('ClusterAgents|Connection status'),
lastContactLabel: s__('ClusterAgents|Last contact'),
configurationLabel: s__('ClusterAgents|Configuration'),
optionsLabel: __('Options'),
troubleshootingText: s__('ClusterAgents|Learn how to troubleshoot'),
neverConnectedText: s__('ClusterAgents|Never'),
},
components: { components: {
GlLink, GlLink,
GlTable, GlTable,
@ -24,14 +26,10 @@ export default {
GlTooltip, GlTooltip,
GlPopover, GlPopover,
TimeAgoTooltip, TimeAgoTooltip,
}, AgentOptions,
directives: {
GlModalDirective,
}, },
mixins: [timeagoMixin], mixins: [timeagoMixin],
INSTALL_AGENT_MODAL_ID,
AGENT_STATUSES, AGENT_STATUSES,
troubleshooting_link: helpPagePath('user/clusters/agent/index', { troubleshooting_link: helpPagePath('user/clusters/agent/index', {
anchor: 'troubleshooting', anchor: 'troubleshooting',
}), }),
@ -40,6 +38,16 @@ export default {
required: true, required: true,
type: Array, type: Array,
}, },
defaultBranchName: {
default: '.noBranch',
required: false,
type: String,
},
maxAgents: {
default: null,
required: false,
type: Number,
},
}, },
computed: { computed: {
fields() { fields() {
@ -47,22 +55,27 @@ export default {
return [ return [
{ {
key: 'name', key: 'name',
label: s__('ClusterAgents|Name'), label: this.$options.i18n.nameLabel,
tdClass, tdClass,
}, },
{ {
key: 'status', key: 'status',
label: s__('ClusterAgents|Connection status'), label: this.$options.i18n.statusLabel,
tdClass, tdClass,
}, },
{ {
key: 'lastContact', key: 'lastContact',
label: s__('ClusterAgents|Last contact'), label: this.$options.i18n.lastContactLabel,
tdClass, tdClass,
}, },
{ {
key: 'configuration', key: 'configuration',
label: s__('ClusterAgents|Configuration'), label: this.$options.i18n.configurationLabel,
tdClass,
},
{
key: 'options',
label: this.$options.i18n.optionsLabel,
tdClass, tdClass,
}, },
]; ];
@ -118,7 +131,7 @@ export default {
</p> </p>
<p class="gl-mb-0"> <p class="gl-mb-0">
<gl-link :href="$options.troubleshooting_link" target="_blank" class="gl-font-sm"> <gl-link :href="$options.troubleshooting_link" target="_blank" class="gl-font-sm">
{{ s__('ClusterAgents|Learn how to troubleshoot') }}</gl-link {{ $options.i18n.troubleshootingText }}</gl-link
> >
</p> </p>
</gl-popover> </gl-popover>
@ -127,7 +140,7 @@ export default {
<template #cell(lastContact)="{ item }"> <template #cell(lastContact)="{ item }">
<span data-testid="cluster-agent-last-contact"> <span data-testid="cluster-agent-last-contact">
<time-ago-tooltip v-if="item.lastContact" :time="item.lastContact" /> <time-ago-tooltip v-if="item.lastContact" :time="item.lastContact" />
<span v-else>{{ s__('ClusterAgents|Never') }}</span> <span v-else>{{ $options.i18n.neverConnectedText }}</span>
</span> </span>
</template> </template>
@ -140,5 +153,13 @@ export default {
<span v-else>{{ getAgentConfigPath(item.name) }}</span> <span v-else>{{ getAgentConfigPath(item.name) }}</span>
</span> </span>
</template> </template>
<template #cell(options)="{ item }">
<agent-options
:agent="item"
:default-branch-name="defaultBranchName"
:max-agents="maxAgents"
/>
</template>
</gl-table> </gl-table>
</template> </template>

View file

@ -151,7 +151,11 @@ export default {
<section v-else-if="agentList"> <section v-else-if="agentList">
<div v-if="agentList.length"> <div v-if="agentList.length">
<agent-table :agents="agentList" /> <agent-table
:agents="agentList"
:default-branch-name="defaultBranchName"
:max-agents="cursor.first"
/>
<div v-if="showPagination" class="gl-display-flex gl-justify-content-center gl-mt-5"> <div v-if="showPagination" class="gl-display-flex gl-justify-content-center gl-mt-5">
<gl-keyset-pagination v-bind="agentPageInfo" @prev="prevPage" @next="nextPage" /> <gl-keyset-pagination v-bind="agentPageInfo" @prev="prevPage" @next="nextPage" />

View file

@ -106,7 +106,7 @@ export const I18N_AGENT_MODAL = {
empty_state: { empty_state: {
modalTitle: s__('ClusterAgents|Connect your cluster through the Agent'), modalTitle: s__('ClusterAgents|Connect your cluster through the Agent'),
modalBody: s__( modalBody: s__(
"ClusterAgents|To install a new agent, first add the agent's configuration file to this repository. %{linkStart}What's the agent's configuration file?%{linkEnd}", "ClusterAgents|To install a new agent, first add the agent's configuration file to this repository. %{linkStart}Learn more about installing GitLab Agent.%{linkEnd}",
), ),
enableKasText: s__( enableKasText: s__(
"ClusterAgents|Your instance doesn't have the %{linkStart}GitLab Agent Server (KAS)%{linkEnd} set up. Ask a GitLab Administrator to install it.", "ClusterAgents|Your instance doesn't have the %{linkStart}GitLab Agent Server (KAS)%{linkEnd} set up. Ask a GitLab Administrator to install it.",
@ -242,3 +242,5 @@ export const EVENT_ACTIONS_CHANGE = 'change_tab';
export const MODAL_TYPE_EMPTY = 'empty_state'; export const MODAL_TYPE_EMPTY = 'empty_state';
export const MODAL_TYPE_REGISTER = 'agent_registration'; export const MODAL_TYPE_REGISTER = 'agent_registration';
export const DELETE_AGENT_MODAL_ID = 'delete-agent-modal-%{agentName}';

View file

@ -63,3 +63,25 @@ export function addAgentConfigToStore(
}); });
} }
} }
export function removeAgentFromStore(store, deleteClusterAgent, query, variables) {
if (!hasErrors(deleteClusterAgent)) {
const sourceData = store.readQuery({
query,
variables,
});
const data = produce(sourceData, (draftData) => {
draftData.project.clusterAgents.nodes = draftData.project.clusterAgents.nodes.filter(
({ id }) => id !== deleteClusterAgent.id,
);
draftData.project.clusterAgents.count -= 1;
});
store.writeQuery({
query,
variables,
data,
});
}
}

View file

@ -0,0 +1,5 @@
mutation deleteClusterAgent($input: ClusterAgentDeleteInput!) {
clusterAgentDelete(input: $input) {
errors
}
}

View file

@ -1,8 +1,10 @@
import { GlToast } from '@gitlab/ui';
import Vue from 'vue'; import Vue from 'vue';
import VueApollo from 'vue-apollo'; import VueApollo from 'vue-apollo';
import loadClusters from './load_clusters'; import loadClusters from './load_clusters';
import loadMainView from './load_main_view'; import loadMainView from './load_main_view';
Vue.use(GlToast);
Vue.use(VueApollo); Vue.use(VueApollo);
export default () => { export default () => {

View file

@ -1,64 +0,0 @@
import $ from 'jquery';
import { Rails } from '~/lib/utils/rails_ujs';
import { rstrip } from './lib/utils/common_utils';
function openConfirmDangerModal($form, $modal, text) {
const $input = $('.js-legacy-confirm-danger-input', $modal);
$input.val('');
$('.js-confirm-text', $modal).text(text || '');
$modal.modal('show');
const confirmTextMatch = $('.js-legacy-confirm-danger-match', $modal).text();
const $submit = $('.js-legacy-confirm-danger-submit', $modal);
$submit.disable();
$input.focus();
// eslint-disable-next-line @gitlab/no-global-event-off
$input.off('input').on('input', function handleInput() {
const confirmText = rstrip($(this).val());
if (confirmText === confirmTextMatch) {
$submit.enable();
} else {
$submit.disable();
}
});
// eslint-disable-next-line @gitlab/no-global-event-off
$('.js-legacy-confirm-danger-submit', $modal)
.off('click')
.on('click', () => {
if ($form.data('remote')) {
Rails.fire($form[0], 'submit');
} else {
$form.submit();
}
});
}
function getModal($btn) {
const $modal = $btn.prev('.modal');
if ($modal.length) {
return $modal;
}
return $('#modal-confirm-danger');
}
export default function initConfirmDangerModal() {
$(document).on('click', '.js-legacy-confirm-danger', (e) => {
const $btn = $(e.target);
const checkFieldName = $btn.data('checkFieldName');
const checkFieldCompareValue = $btn.data('checkCompareValue');
const checkFieldVal = parseInt($(`[name="${checkFieldName}"]`).val(), 10);
if (!checkFieldName || checkFieldVal < checkFieldCompareValue) {
e.preventDefault();
const $form = $btn.closest('form');
const $modal = getModal($btn);
const text = $btn.data('confirmDangerMessage');
openConfirmDangerModal($form, $modal, text);
}
});
}

View file

@ -20,7 +20,7 @@ export default {
}; };
</script> </script>
<template> <template>
<node-view-wrapper class="gl-relative code highlight" as="pre"> <node-view-wrapper class="content-editor-code-block gl-relative code highlight" as="pre">
<span <span
data-testid="frontmatter-label" data-testid="frontmatter-label"
class="gl-absolute gl-top-0 gl-right-3" class="gl-absolute gl-top-0 gl-right-3"

View file

@ -49,3 +49,10 @@ export const LOADING_ERROR_EVENT = 'loadingError';
export const PARSE_HTML_PRIORITY_LOWEST = 1; export const PARSE_HTML_PRIORITY_LOWEST = 1;
export const PARSE_HTML_PRIORITY_DEFAULT = 50; export const PARSE_HTML_PRIORITY_DEFAULT = 50;
export const PARSE_HTML_PRIORITY_HIGHEST = 100; export const PARSE_HTML_PRIORITY_HIGHEST = 100;
export const EXTENSION_PRIORITY_LOWER = 75;
/**
* 100 is the default priority in Tiptap
* https://tiptap.dev/guide/custom-extensions/#priority
*/
export const EXTENSION_PRIORITY_DEFAULT = 100;

View file

@ -1 +1,12 @@
export { Code as default } from '@tiptap/extension-code'; import Code from '@tiptap/extension-code';
import { EXTENSION_PRIORITY_LOWER } from '../constants';
export default Code.extend({
excludes: null,
/**
* Reduce the rendering priority of the code mark to
* ensure the bold, italic, and strikethrough marks
* are rendered first.
*/
priority: EXTENSION_PRIORITY_LOWER,
});

View file

@ -19,7 +19,14 @@ export default CodeBlockLowlight.extend({
}; };
}, },
renderHTML({ HTMLAttributes }) { renderHTML({ HTMLAttributes }) {
return ['div', ['pre', HTMLAttributes, ['code', {}, 0]]]; return [
'pre',
{
...HTMLAttributes,
class: `content-editor-code-block ${HTMLAttributes.class}`,
},
['code', {}, 0],
];
}, },
}).configure({ }).configure({
lowlight, lowlight,

View file

@ -14,9 +14,20 @@ export default CodeBlockHighlight.extend({
}, },
]; ];
}, },
addCommands() {
return {
setFrontmatter: (attributes) => ({ commands }) => {
return commands.setNode(this.name, attributes);
},
toggleFrontmatter: (attributes) => ({ commands }) => {
return commands.toggleNode(this.name, 'paragraph', attributes);
},
};
},
addNodeView() { addNodeView() {
return new VueNodeViewRenderer(FrontmatterWrapper); return new VueNodeViewRenderer(FrontmatterWrapper);
}, },
addInputRules() { addInputRules() {
return []; return [];
}, },

View file

@ -66,6 +66,17 @@ export default Image.extend({
}, },
]; ];
}, },
renderHTML({ HTMLAttributes }) {
return [
'img',
{
src: HTMLAttributes.src,
alt: HTMLAttributes.alt,
title: HTMLAttributes.title,
'data-canonical-src': HTMLAttributes.canonicalSrc,
},
];
},
addNodeView() { addNodeView() {
return VueNodeViewRenderer(ImageWrapper); return VueNodeViewRenderer(ImageWrapper);
}, },

View file

@ -65,8 +65,8 @@ import {
const defaultSerializerConfig = { const defaultSerializerConfig = {
marks: { marks: {
[Bold.name]: defaultMarkdownSerializer.marks.strong, [Bold.name]: defaultMarkdownSerializer.marks.strong,
[Code.name]: defaultMarkdownSerializer.marks.code,
[Italic.name]: { open: '_', close: '_', mixable: true, expelEnclosingWhitespace: true }, [Italic.name]: { open: '_', close: '_', mixable: true, expelEnclosingWhitespace: true },
[Code.name]: defaultMarkdownSerializer.marks.code,
[Subscript.name]: { open: '<sub>', close: '</sub>', mixable: true }, [Subscript.name]: { open: '<sub>', close: '</sub>', mixable: true },
[Superscript.name]: { open: '<sup>', close: '</sup>', mixable: true }, [Superscript.name]: { open: '<sup>', close: '</sup>', mixable: true },
[InlineDiff.name]: { [InlineDiff.name]: {

View file

@ -1,4 +1,4 @@
import { uniq } from 'lodash'; import { uniq, isString } from 'lodash';
const defaultAttrs = { const defaultAttrs = {
td: { colspan: 1, rowspan: 1, colwidth: null }, td: { colspan: 1, rowspan: 1, colwidth: null },
@ -325,9 +325,12 @@ export function renderHardBreak(state, node, parent, index) {
export function renderImage(state, node) { export function renderImage(state, node) {
const { alt, canonicalSrc, src, title } = node.attrs; const { alt, canonicalSrc, src, title } = node.attrs;
if (isString(src) || isString(canonicalSrc)) {
const quotedTitle = title ? ` ${state.quote(title)}` : ''; const quotedTitle = title ? ` ${state.quote(title)}` : '';
state.write(`![${state.esc(alt || '')}](${state.esc(canonicalSrc || src)}${quotedTitle})`); state.write(`![${state.esc(alt || '')}](${state.esc(canonicalSrc || src)}${quotedTitle})`);
}
} }
export function renderPlayable(state, node) { export function renderPlayable(state, node) {

View file

@ -35,7 +35,8 @@ const trackInputRule = (contentType, inputRule) => {
}; };
const trackInputRulesAndShortcuts = (tiptapExtension) => { const trackInputRulesAndShortcuts = (tiptapExtension) => {
return tiptapExtension.extend({ return tiptapExtension
.extend({
addKeyboardShortcuts() { addKeyboardShortcuts() {
const shortcuts = this.parent?.() || {}; const shortcuts = this.parent?.() || {};
const { name } = this; const { name } = this;
@ -59,7 +60,8 @@ const trackInputRulesAndShortcuts = (tiptapExtension) => {
return inputRules.map((inputRule) => trackInputRule(name, inputRule)); return inputRules.map((inputRule) => trackInputRule(name, inputRule));
}, },
}); })
.configure(tiptapExtension.options);
}; };
export default trackInputRulesAndShortcuts; export default trackInputRulesAndShortcuts;

View file

@ -0,0 +1,232 @@
<script>
import { GlAlert, GlButton, GlDrawer, GlFormGroup, GlFormInput } from '@gitlab/ui';
import { get as getPropValueByPath, isEmpty } from 'lodash';
import { produce } from 'immer';
import { MountingPortal } from 'portal-vue';
import { __ } from '~/locale';
import { logError } from '~/lib/logger';
import { getFirstPropertyValue } from '~/lib/utils/common_utils';
import { INDEX_ROUTE_NAME } from '../constants';
const MSG_SAVE_CHANGES = __('Save changes');
const MSG_ERROR = __('Something went wrong. Please try again.');
const MSG_OPTIONAL = __('(optional)');
const MSG_CANCEL = __('Cancel');
/**
* This component is a first iteration towards a general reusable Create/Update component
*
* There's some opportunity to improve cohesion of this module which we are planning
* to address after solidifying the abstraction's requirements.
*
* Please see https://gitlab.com/gitlab-org/gitlab/-/issues/349441
*/
export default {
components: {
GlAlert,
GlButton,
GlDrawer,
GlFormGroup,
GlFormInput,
MountingPortal,
},
props: {
drawerOpen: {
type: Boolean,
required: true,
},
fields: {
type: Array,
required: true,
},
title: {
type: String,
required: true,
},
successMessage: {
type: String,
required: true,
},
mutation: {
type: Object,
required: true,
},
getQuery: {
type: Object,
required: false,
default: null,
},
getQueryNodePath: {
type: String,
required: false,
default: null,
},
existingModel: {
type: Object,
required: false,
default: () => ({}),
},
additionalCreateParams: {
type: Object,
required: false,
default: () => ({}),
},
buttonLabel: {
type: String,
required: false,
default: () => MSG_SAVE_CHANGES,
},
},
data() {
const initialModel = this.fields.reduce(
(map, field) =>
Object.assign(map, {
[field.name]: this.existingModel ? this.existingModel[field.name] : null,
}),
{},
);
return {
model: initialModel,
submitting: false,
errorMessages: [],
};
},
computed: {
isEditMode() {
return this.existingModel?.id;
},
isInvalid() {
const { fields, model } = this;
return fields.some((field) => {
return field.required && isEmpty(model[field.name]);
});
},
variables() {
const { additionalCreateParams, fields, isEditMode, model } = this;
const variables = fields.reduce(
(map, field) =>
Object.assign(map, {
[field.name]: this.formatValue(model, field),
}),
{},
);
if (isEditMode) {
return { input: { id: this.existingModel.id, ...variables } };
}
return { input: { ...additionalCreateParams, ...variables } };
},
},
methods: {
formatValue(model, field) {
if (!isEmpty(model[field.name]) && field.input?.type === 'number') {
return parseFloat(model[field.name]);
}
return model[field.name];
},
save() {
const { mutation, variables, close } = this;
this.submitting = true;
return this.$apollo
.mutate({
mutation,
variables,
update: (store, { data }) => {
const { errors, ...result } = getFirstPropertyValue(data);
if (errors?.length) {
this.errorMessages = errors;
} else {
this.updateCache(store, result);
close(true);
}
},
})
.catch((e) => {
logError(e);
this.errorMessages = [MSG_ERROR];
})
.finally(() => {
this.submitting = false;
});
},
close(success) {
if (success) {
// This is needed so toast perists when route is changed
this.$root.$toast.show(this.successMessage);
}
this.$router.replace({ name: this.$options.INDEX_ROUTE_NAME });
},
updateCache(store, result) {
const { getQuery, isEditMode, getQueryNodePath } = this;
if (isEditMode || !getQuery) return;
const sourceData = store.readQuery(getQuery);
const newData = produce(sourceData, (draftState) => {
getPropValueByPath(draftState, getQueryNodePath).nodes.push(getFirstPropertyValue(result));
});
store.writeQuery({
...getQuery,
data: newData,
});
},
getFieldLabel(field) {
const optionalSuffix = field.required ? '' : ` ${MSG_OPTIONAL}`;
return field.label + optionalSuffix;
},
},
MSG_CANCEL,
INDEX_ROUTE_NAME,
};
</script>
<template>
<mounting-portal mount-to="#js-crm-form-portal" append>
<gl-drawer class="gl-drawer-responsive gl-absolute" :open="drawerOpen" @close="close(false)">
<template #title>
<h3>{{ title }}</h3>
</template>
<gl-alert v-if="errorMessages.length" variant="danger" @dismiss="errorMessages = []">
<ul class="gl-mb-0! gl-ml-5">
<li v-for="error in errorMessages" :key="error">
{{ error }}
</li>
</ul>
</gl-alert>
<form @submit.prevent="save">
<gl-form-group
v-for="field in fields"
:key="field.name"
:label="getFieldLabel(field)"
:label-for="field.name"
>
<gl-form-input :id="field.name" v-bind="field.input" v-model="model[field.name]" />
</gl-form-group>
<span class="gl-float-right">
<gl-button data-testid="cancel-button" @click="close(false)">
{{ $options.MSG_CANCEL }}
</gl-button>
<gl-button
variant="confirm"
:disabled="isInvalid"
:loading="submitting"
data-testid="save-button"
type="submit"
>{{ buttonLabel }}</gl-button
>
</span>
</form>
</gl-drawer>
</mounting-portal>
</template>

View file

@ -153,7 +153,7 @@ export default {
}; };
</script> </script>
<template> <template>
<div class="cycle-analytics"> <div>
<h3>{{ $options.i18n.pageTitle }}</h3> <h3>{{ $options.i18n.pageTitle }}</h3>
<div class="gl-display-flex gl-flex-direction-column gl-md-flex-direction-row"> <div class="gl-display-flex gl-flex-direction-column gl-md-flex-direction-row">
<path-navigation <path-navigation

View file

@ -57,7 +57,7 @@ export default {
}; };
</script> </script>
<template> <template>
<gl-skeleton-loading v-if="loading" :lines="2" class="h-auto pt-2 pb-1" /> <gl-skeleton-loading v-if="loading" :lines="2" />
<gl-path v-else :key="selectedStage.id" :items="stages" @selected="onSelectStage"> <gl-path v-else :key="selectedStage.id" :items="stages" @selected="onSelectStage">
<template #default="{ pathItem, pathId }"> <template #default="{ pathItem, pathId }">
<gl-popover <gl-popover

View file

@ -32,6 +32,9 @@ const WORKFLOW_COLUMN_TITLES = {
mergeRequests: { ...DEFAULT_WORKFLOW_TITLE_PROPERTIES, label: __('Merge requests') }, mergeRequests: { ...DEFAULT_WORKFLOW_TITLE_PROPERTIES, label: __('Merge requests') },
}; };
const fullProjectPath = ({ namespaceFullPath = '', projectPath }) =>
namespaceFullPath.split('/').length > 1 ? `${namespaceFullPath}/${projectPath}` : projectPath;
export default { export default {
name: 'StageTable', name: 'StageTable',
components: { components: {
@ -89,6 +92,11 @@ export default {
required: false, required: false,
default: true, default: true,
}, },
includeProjectName: {
type: Boolean,
required: false,
default: false,
},
}, },
data() { data() {
if (this.pagination) { if (this.pagination) {
@ -144,8 +152,15 @@ export default {
isMrLink(url = '') { isMrLink(url = '') {
return url.includes('/merge_request'); return url.includes('/merge_request');
}, },
itemId({ url, iid }) { itemId({ iid, projectPath, namespaceFullPath = '' }, separator = '#') {
return this.isMrLink(url) ? `!${iid}` : `#${iid}`; const prefix = this.includeProjectName
? fullProjectPath({ namespaceFullPath, projectPath })
: '';
return `${prefix}${separator}${iid}`;
},
itemDisplayName(item) {
const separator = this.isMrLink(item.url) ? '!' : '#';
return this.itemId(item, separator);
}, },
itemTitle(item) { itemTitle(item) {
return item.title || item.name; return item.title || item.name;
@ -201,8 +216,11 @@ export default {
<div data-testid="vsa-stage-event"> <div data-testid="vsa-stage-event">
<div v-if="item.id" data-testid="vsa-stage-content"> <div v-if="item.id" data-testid="vsa-stage-content">
<p class="gl-m-0"> <p class="gl-m-0">
<gl-link class="gl-text-black-normal pipeline-id" :href="item.url" <gl-link
>#{{ item.id }}</gl-link data-testid="vsa-stage-event-link"
class="gl-text-black-normal"
:href="item.url"
>{{ itemId(item.id, '#') }}</gl-link
> >
<gl-icon :size="16" name="fork" /> <gl-icon :size="16" name="fork" />
<gl-link <gl-link
@ -240,7 +258,12 @@ export default {
<gl-link class="gl-text-black-normal" :href="item.url">{{ itemTitle(item) }}</gl-link> <gl-link class="gl-text-black-normal" :href="item.url">{{ itemTitle(item) }}</gl-link>
</h5> </h5>
<p class="gl-m-0"> <p class="gl-m-0">
<gl-link class="gl-text-black-normal" :href="item.url">{{ itemId(item) }}</gl-link> <gl-link
data-testid="vsa-stage-event-link"
class="gl-text-black-normal"
:href="item.url"
>{{ itemDisplayName(item) }}</gl-link
>
<span class="gl-font-lg">&middot;</span> <span class="gl-font-lg">&middot;</span>
<span data-testid="vsa-stage-event-date"> <span data-testid="vsa-stage-event-date">
{{ s__('OpenedNDaysAgo|Opened') }} {{ s__('OpenedNDaysAgo|Opened') }}

View file

@ -59,7 +59,9 @@ export default {
}; };
</script> </script>
<template> <template>
<div class="gl-mt-3 gl-py-2 gl-px-3 bg-gray-light border-top border-bottom"> <div
class="gl-mt-3 gl-py-2 gl-px-3 gl-bg-gray-10 gl-border-b-1 gl-border-b-solid gl-border-t-1 gl-border-t-solid gl-border-gray-100"
>
<filter-bar <filter-bar
data-testid="vsa-filter-bar" data-testid="vsa-filter-bar"
class="filtered-search-box gl-display-flex gl-mb-2 gl-mr-3 gl-border-none" class="filtered-search-box gl-display-flex gl-mb-2 gl-mr-3 gl-border-none"

View file

@ -7,6 +7,7 @@ import ReplyPlaceholder from '~/notes/components/discussion_reply_placeholder.vu
import { updateGlobalTodoCount } from '~/vue_shared/components/sidebar/todo_toggle/utils'; import { updateGlobalTodoCount } from '~/vue_shared/components/sidebar/todo_toggle/utils';
import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
import DesignNotePin from '~/vue_shared/components/design_management/design_note_pin.vue'; import DesignNotePin from '~/vue_shared/components/design_management/design_note_pin.vue';
import { isLoggedIn } from '~/lib/utils/common_utils';
import { ACTIVE_DISCUSSION_SOURCE_TYPES } from '../../constants'; import { ACTIVE_DISCUSSION_SOURCE_TYPES } from '../../constants';
import createNoteMutation from '../../graphql/mutations/create_note.mutation.graphql'; import createNoteMutation from '../../graphql/mutations/create_note.mutation.graphql';
import toggleResolveDiscussionMutation from '../../graphql/mutations/toggle_resolve_discussion.mutation.graphql'; import toggleResolveDiscussionMutation from '../../graphql/mutations/toggle_resolve_discussion.mutation.graphql';
@ -17,6 +18,7 @@ import { hasErrors } from '../../utils/cache_update';
import { extractDesign } from '../../utils/design_management_utils'; import { extractDesign } from '../../utils/design_management_utils';
import { ADD_DISCUSSION_COMMENT_ERROR } from '../../utils/error_messages'; import { ADD_DISCUSSION_COMMENT_ERROR } from '../../utils/error_messages';
import DesignNote from './design_note.vue'; import DesignNote from './design_note.vue';
import DesignNoteSignedOut from './design_note_signed_out.vue';
import DesignReplyForm from './design_reply_form.vue'; import DesignReplyForm from './design_reply_form.vue';
import ToggleRepliesWidget from './toggle_replies_widget.vue'; import ToggleRepliesWidget from './toggle_replies_widget.vue';
@ -24,6 +26,7 @@ export default {
components: { components: {
ApolloMutation, ApolloMutation,
DesignNote, DesignNote,
DesignNoteSignedOut,
ReplyPlaceholder, ReplyPlaceholder,
DesignReplyForm, DesignReplyForm,
GlIcon, GlIcon,
@ -55,6 +58,14 @@ export default {
required: false, required: false,
default: '', default: '',
}, },
registerPath: {
type: String,
required: true,
},
signInPath: {
type: String,
required: true,
},
resolvedDiscussionsExpanded: { resolvedDiscussionsExpanded: {
type: Boolean, type: Boolean,
required: true, required: true,
@ -93,6 +104,7 @@ export default {
isResolving: false, isResolving: false,
shouldChangeResolvedStatus: false, shouldChangeResolvedStatus: false,
areRepliesCollapsed: this.discussion.resolved, areRepliesCollapsed: this.discussion.resolved,
isLoggedIn: isLoggedIn(),
}; };
}, },
computed: { computed: {
@ -226,7 +238,7 @@ export default {
:class="{ 'gl-bg-blue-50': isDiscussionActive }" :class="{ 'gl-bg-blue-50': isDiscussionActive }"
@error="$emit('update-note-error', $event)" @error="$emit('update-note-error', $event)"
> >
<template v-if="discussion.resolvable" #resolve-discussion> <template v-if="isLoggedIn && discussion.resolvable" #resolve-discussion>
<button <button
v-gl-tooltip v-gl-tooltip
:class="{ 'is-active': discussion.resolved }" :class="{ 'is-active': discussion.resolved }"
@ -269,7 +281,15 @@ export default {
:class="{ 'gl-bg-blue-50': isDiscussionActive }" :class="{ 'gl-bg-blue-50': isDiscussionActive }"
@error="$emit('update-note-error', $event)" @error="$emit('update-note-error', $event)"
/> />
<li v-show="isReplyPlaceholderVisible" class="reply-wrapper discussion-reply-holder"> <li
v-show="isReplyPlaceholderVisible"
class="reply-wrapper discussion-reply-holder"
:class="{ 'gl-bg-gray-10': !isLoggedIn }"
>
<template v-if="!isLoggedIn">
<design-note-signed-out :register-path="registerPath" :sign-in-path="signInPath" />
</template>
<template v-else>
<reply-placeholder <reply-placeholder
v-if="!isFormVisible" v-if="!isFormVisible"
class="qa-discussion-reply" class="qa-discussion-reply"
@ -301,6 +321,7 @@ export default {
</template> </template>
</design-reply-form> </design-reply-form>
</apollo-mutation> </apollo-mutation>
</template>
</li> </li>
</ul> </ul>
</div> </div>

Some files were not shown because too many files have changed in this diff Show more