New upstream version 14.0.10

This commit is contained in:
Sruthi Chandran 2021-09-04 01:27:46 +05:30
parent 75824f5514
commit 3bbd721fc3
5879 changed files with 192817 additions and 94213 deletions

View file

@ -31,11 +31,6 @@ rules:
- error - error
- allowElseIf: true - allowElseIf: true
lines-between-class-members: off lines-between-class-members: off
# Disabled for now, to make the plugin-vue 4.5 -> 5.0 update smoother
vue/no-confusing-v-for-v-if: error
vue/no-use-v-if-with-v-for: off
vue/no-v-html: error
vue/use-v-on-exact: off
# all offenses of no-jquery/no-animate-toggle are false positives ( $toast.show() ) # all offenses of no-jquery/no-animate-toggle are false positives ( $toast.show() )
no-jquery/no-animate-toggle: off no-jquery/no-animate-toggle: off
no-jquery/no-event-shorthand: off no-jquery/no-event-shorthand: off

1
.gitignore vendored
View file

@ -42,6 +42,7 @@ eslint-report.html
/config/redis.cache.yml /config/redis.cache.yml
/config/redis.queues.yml /config/redis.queues.yml
/config/redis.shared_state.yml /config/redis.shared_state.yml
/config/redis.trace_chunks.yml
/config/unicorn.rb /config/unicorn.rb
/config/puma.rb /config/puma.rb
/config/puma_actioncable.rb /config/puma_actioncable.rb

View file

@ -107,3 +107,4 @@ variables:
include: include:
- local: .gitlab/ci/*.gitlab-ci.yml - local: .gitlab/ci/*.gitlab-ci.yml
- remote: 'https://gitlab.com/gitlab-org/frontend/untamper-my-lockfile/-/raw/main/.gitlab-ci-template.yml'

View file

@ -7,6 +7,8 @@
*.rake @gitlab-org/maintainers/rails-backend *.rake @gitlab-org/maintainers/rails-backend
[Documentation Directories] [Documentation Directories]
.markdownlint.yml @marcel.amirault @eread @aqualls @cnorris
/doc/.markdownlint @marcel.amirault @eread @aqualls @cnorris
/doc/ @gl-docsteam /doc/ @gl-docsteam
/doc/.vale/ @marcel.amirault @eread @aqualls @cnorris /doc/.vale/ @marcel.amirault @eread @aqualls @cnorris
/doc/administration/geo/ @axil /doc/administration/geo/ @axil
@ -21,7 +23,7 @@
/doc/administration/redis/ @axil /doc/administration/redis/ @axil
/doc/administration/reference_architectures/ @axil /doc/administration/reference_architectures/ @axil
/doc/administration/snippets/ @aqualls /doc/administration/snippets/ @aqualls
/doc/administration/troubleshooting @axil @marcia /doc/administration/troubleshooting @axil @marcia @eread
/doc/api/group_activity_analytics.md @msedlakjakubowski /doc/api/group_activity_analytics.md @msedlakjakubowski
/doc/ci/ @marcel.amirault @sselhorn /doc/ci/ @marcel.amirault @sselhorn
/doc/ci/environments/ @axil /doc/ci/environments/ @axil
@ -29,10 +31,11 @@
/doc/ci/test_cases/ @msedlakjakubowski /doc/ci/test_cases/ @msedlakjakubowski
/doc/development/ @marcia /doc/development/ @marcia
/doc/development/documentation/ @cnorris /doc/development/documentation/ @cnorris
/doc/development/i18n/ @ngaskill
/doc/development/value_stream_analytics.md @msedlakjakubowski /doc/development/value_stream_analytics.md @msedlakjakubowski
/doc/gitlab-basics/ @marcia /doc/gitlab-basics/ @marcia
/doc/install/ @axil /doc/install/ @axil
/doc/integration/ @aqualls /doc/integration/ @aqualls @eread
/doc/operations/ @ngaskill @axil /doc/operations/ @ngaskill @axil
/doc/push_rules/ @aqualls /doc/push_rules/ @aqualls
/doc/ssh/ @eread /doc/ssh/ @eread
@ -43,7 +46,7 @@
/doc/user/analytics/ @msedlakjakubowski @ngaskill /doc/user/analytics/ @msedlakjakubowski @ngaskill
/doc/user/application_security @rdickenson /doc/user/application_security @rdickenson
/doc/user/clusters/ @marcia /doc/user/clusters/ @marcia
/doc/user/compliance/ @rdickenson /doc/user/compliance/ @rdickenson @eread
/doc/user/group/ @msedlakjakubowski /doc/user/group/ @msedlakjakubowski
/doc/user/group/bulk_editing/ @msedlakjakubowski /doc/user/group/bulk_editing/ @msedlakjakubowski
/doc/user/group/devops_adoption/ @msedlakjakubowski /doc/user/group/devops_adoption/ @msedlakjakubowski
@ -54,10 +57,10 @@
/doc/user/group/value_stream_analytics/ @msedlakjakubowski /doc/user/group/value_stream_analytics/ @msedlakjakubowski
/doc/user/infrastructure/ @marcia /doc/user/infrastructure/ @marcia
/doc/user/packages/ @ngaskill /doc/user/packages/ @ngaskill
/doc/user/profile/ @msedlakjakubowski /doc/user/profile/ @msedlakjakubowski @eread
/doc/user/project/ @aqualls @axil @eread @msedlakjakubowski @ngaskill /doc/user/project/ @aqualls @axil @eread @msedlakjakubowski @ngaskill
/doc/user/project/clusters/ @ngaskill /doc/user/project/clusters/ @ngaskill
/doc/user/project/import/ @msedlakjakubowski /doc/user/project/import/ @ngaskill @msedlakjakubowski
/doc/user/project/integrations/ @aqualls /doc/user/project/integrations/ @aqualls
/doc/user/project/integrations/prometheus_library/ @ngaskill /doc/user/project/integrations/prometheus_library/ @ngaskill
/doc/user/project/issues/ @msedlakjakubowski /doc/user/project/issues/ @msedlakjakubowski
@ -65,7 +68,7 @@
/doc/user/project/milestones/ @msedlakjakubowski /doc/user/project/milestones/ @msedlakjakubowski
/doc/user/project/pages/ @axil /doc/user/project/pages/ @axil
/doc/user/project/repository/ @aqualls /doc/user/project/repository/ @aqualls
/doc/user/project/settings/ @aqualls /doc/user/project/settings/ @aqualls @eread
/doc/user/project/static_site_editor/index.md @aqualls /doc/user/project/static_site_editor/index.md @aqualls
/doc/user/project/web_ide/index.md @aqualls /doc/user/project/web_ide/index.md @aqualls
/doc/user/project/wiki/index.md @aqualls /doc/user/project/wiki/index.md @aqualls
@ -200,7 +203,8 @@ Dangerfile @gl-quality/eng-prod
[Templates] [Templates]
/lib/gitlab/ci/templates/ @nolith @shinya.maeda @matteeyah /lib/gitlab/ci/templates/ @nolith @shinya.maeda @matteeyah
/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml @DylanGriffith @mayra-cabrera @tkuah /lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml @DylanGriffith @mayra-cabrera @tkuah
/lib/gitlab/ci/templates/Security/ @plafoucriere @gonzoyumo @twoodham @sethgitlab /lib/gitlab/ci/templates/Security/ @gonzoyumo @twoodham @sethgitlab @thiagocsf
/lib/gitlab/ci/templates/Security/Container-Scanning.*.yml @gitlab-org/protect/container-security-backend
[Project Alias] [Project Alias]
/ee/app/models/project_alias.rb @patrickbajao /ee/app/models/project_alias.rb @patrickbajao
@ -216,6 +220,8 @@ Dangerfile @gl-quality/eng-prod
/ee/app/policies/vulnerabilities/ @gitlab-org/secure/threat-insights-backend-team /ee/app/policies/vulnerabilities/ @gitlab-org/secure/threat-insights-backend-team
/ee/app/policies/vulnerability*.rb @gitlab-org/secure/threat-insights-backend-team /ee/app/policies/vulnerability*.rb @gitlab-org/secure/threat-insights-backend-team
/ee/lib/api/vulnerabilit*.rb @gitlab-org/secure/threat-insights-backend-team /ee/lib/api/vulnerabilit*.rb @gitlab-org/secure/threat-insights-backend-team
/ee/lib/gitlab/ci/reports/security/vulnerability_reports_comparer.rb @gitlab-org/secure/threat-insights-backend-team
/ee/spec/lib/gitlab/ci/reports/security/vulnerability_reports_comparer_spec.rb @gitlab-org/secure/threat-insights-backend-team
/ee/spec/policies/vulnerabilities/ @gitlab-org/secure/threat-insights-backend-team /ee/spec/policies/vulnerabilities/ @gitlab-org/secure/threat-insights-backend-team
/ee/spec/policies/vulnerability*.rb @gitlab-org/secure/threat-insights-backend-team /ee/spec/policies/vulnerability*.rb @gitlab-org/secure/threat-insights-backend-team
@ -333,3 +339,11 @@ Dangerfile @gl-quality/eng-prod
[Application Security] [Application Security]
/lib/gitlab/content_security_policy/ @gitlab-com/gl-security/appsec /lib/gitlab/content_security_policy/ @gitlab-com/gl-security/appsec
[Gitaly]
lib/gitlab/git_access.rb @proglottis @toon @zj-gitlab
lib/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
lib/gitlab/checks/** @proglottis @toon @zj-gitlab

View file

@ -36,3 +36,8 @@ template: |
{% else %} {% else %}
No changes. No changes.
{% end %} {% end %}
# The tag format for gitlab-org/gitlab is vX.Y.Z(-rcX)-ee. The -ee prefix would
# be treated as a pre-release identifier, which can result in the wrong tag
# being used as the starting point of a changelog commit range. The custom regex
# here is used to ensure we find the correct tag.
tag_regex: '^v(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)-ee$'

View file

@ -10,8 +10,8 @@
# because some repos are private and CI_JOB_TOKEN cannot access files. # because some repos are private and CI_JOB_TOKEN cannot access files.
# See https://gitlab.com/gitlab-org/gitlab/issues/191273 # See https://gitlab.com/gitlab-org/gitlab/issues/191273
GIT_DEPTH: 1 GIT_DEPTH: 1
# By default, deploy the Review App using the `master` branch of the `gitlab-org/gitlab-docs` project # By default, deploy the Review App using the `main` branch of the `gitlab-org/gitlab-docs` project
DOCS_BRANCH: master DOCS_BRANCH: main
environment: environment:
name: review-docs/mr-${CI_MERGE_REQUEST_IID} name: review-docs/mr-${CI_MERGE_REQUEST_IID}
# DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables
@ -54,8 +54,6 @@ 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.13-ruby-2.7.2 image: registry.gitlab.com/gitlab-org/gitlab-docs/lint-html:alpine-3.13-ruby-2.7.2
# TODO: revert to .default-retry when https://gitlab.com/gitlab-org/gitlab/-/issues/331002 is fixed.
retry: 2
stage: test stage: test
needs: [] needs: []
script: script:

View file

@ -324,3 +324,30 @@ bundle-size-review:
expire_in: 31d expire_in: 31d
paths: paths:
- bundle-size-review - bundle-size-review
.startup-css-check-base:
extends:
- .frontend-test-base
script:
- *yarn-install
- run_timed_command "yarn generate:startup_css"
- yarn check:startup_css
startup-css-check:
extends:
- .startup-css-check-base
- .frontend:rules:default-frontend-jobs
needs:
- job: "compile-test-assets"
- job: "rspec frontend_fixture"
- job: "rspec-ee frontend_fixture"
optional: true
startup-css-check as-if-foss:
extends:
- .startup-css-check-base
- .as-if-foss
- .frontend:rules:default-frontend-jobs-as-if-foss
needs:
- job: "compile-test-assets as-if-foss"
- job: "rspec frontend_fixture as-if-foss"

View file

@ -36,6 +36,23 @@
<<: *gitaly-ruby-gems-cache <<: *gitaly-ruby-gems-cache
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
.gitaly-binaries-cache: &gitaly-binaries-cache
key:
files:
- GITALY_SERVER_VERSION
prefix: "gitaly-binaries"
paths:
- tmp/tests/gitaly/_build/bin/
- tmp/tests/gitaly/config.toml
- tmp/tests/gitaly/gitaly2.config.toml
- tmp/tests/gitaly/internal/
- tmp/tests/gitaly/internal_gitaly2/
- tmp/tests/gitaly/internal_sockets/
- tmp/tests/gitaly/Makefile
- tmp/tests/gitaly/praefect.config.toml
- tmp/tests/gitaly/ruby/
policy: pull
.go-pkg-cache: &go-pkg-cache .go-pkg-cache: &go-pkg-cache
key: "go-pkg-v1" key: "go-pkg-v1"
paths: paths:
@ -81,7 +98,7 @@
<<: *rubocop-cache <<: *rubocop-cache
# We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up but RuboCop has a mechanism # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up but RuboCop has a mechanism
# for keeping only the N latest cache files, so we take advantage of it with `pull-push`. # for keeping only the N latest cache files, so we take advantage of it with `pull-push`.
policy: pull-push policy: push
.qa-ruby-gems-cache: &qa-ruby-gems-cache .qa-ruby-gems-cache: &qa-ruby-gems-cache
key: "qa-ruby-gems-v1" key: "qa-ruby-gems-v1"
@ -97,6 +114,7 @@
cache: cache:
- *ruby-gems-cache - *ruby-gems-cache
- *gitaly-ruby-gems-cache - *gitaly-ruby-gems-cache
- *gitaly-binaries-cache
- *go-pkg-cache - *go-pkg-cache
.setup-test-env-cache-push: .setup-test-env-cache-push:
@ -105,6 +123,11 @@
- *gitaly-ruby-gems-cache-push - *gitaly-ruby-gems-cache-push
- *go-pkg-cache-push - *go-pkg-cache-push
.gitaly-binaries-cache-push:
cache:
- <<: *gitaly-binaries-cache
policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
.rails-cache: .rails-cache:
cache: cache:
- *ruby-gems-cache - *ruby-gems-cache
@ -159,7 +182,7 @@
- *assets-cache-push - *assets-cache-push
.use-pg11: .use-pg11:
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36"
services: services:
- name: postgres:11.6 - name: postgres:11.6
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
@ -168,7 +191,7 @@
POSTGRES_HOST_AUTH_METHOD: trust POSTGRES_HOST_AUTH_METHOD: trust
.use-pg12: .use-pg12:
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36"
services: services:
- name: postgres:12 - name: postgres:12
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
@ -177,7 +200,7 @@
POSTGRES_HOST_AUTH_METHOD: trust POSTGRES_HOST_AUTH_METHOD: trust
.use-pg11-ee: .use-pg11-ee:
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36"
services: services:
- name: postgres:11.6 - name: postgres:11.6
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
@ -188,7 +211,7 @@
POSTGRES_HOST_AUTH_METHOD: trust POSTGRES_HOST_AUTH_METHOD: trust
.use-pg12-ee: .use-pg12-ee:
image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36"
services: services:
- name: postgres:12 - name: postgres:12
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]

View file

@ -8,7 +8,7 @@
.minimal-bundle-install: .minimal-bundle-install:
script: script:
- export BUNDLE_WITHOUT="${BUNDLE_WITHOUT}:default:test:puma:unicorn:kerberos:metrics:omnibus:ed25519" - export BUNDLE_WITHOUT="${BUNDLE_WITHOUT}:default:test:puma:kerberos:metrics:omnibus:ed25519"
- bundle_install_script - bundle_install_script
.base-script: .base-script:
@ -192,6 +192,14 @@ update-setup-test-env-cache:
artifacts: artifacts:
paths: [] # This job's purpose is only to update the cache. paths: [] # This job's purpose is only to update the cache.
update-gitaly-binaries-cache:
extends:
- setup-test-env
- .gitaly-binaries-cache-push
- .shared:rules:update-gitaly-binaries-cache
artifacts:
paths: [] # This job's purpose is only to update the cache.
.coverage-base: .coverage-base:
extends: extends:
- .default-retry - .default-retry

View file

@ -27,7 +27,7 @@ code_quality:
variables: variables:
SAST_BRAKEMAN_LEVEL: 2 # GitLab-specific SAST_BRAKEMAN_LEVEL: 2 # GitLab-specific
SAST_EXCLUDED_PATHS: "qa, spec, doc, ee/spec, config/gitlab.yml.example, tmp" # GitLab-specific SAST_EXCLUDED_PATHS: "qa, spec, doc, ee/spec, config/gitlab.yml.example, tmp" # GitLab-specific
SAST_DISABLE_BABEL: "true" SAST_EXCLUDED_ANALYZERS: bandit, flawfinder, phpcs-security-audit, pmd-apex, security-code-scan, spotbugs
brakeman-sast: brakeman-sast:
rules: !reference [".reports:rules:sast", rules] rules: !reference [".reports:rules:sast", rules]

View file

@ -39,11 +39,11 @@ review-build-cng:
.review-workflow-base: .review-workflow-base:
extends: extends:
- .default-retry - .default-retry
image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-helm3-kubectl1.14 image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-helm3.5-kubectl1.17
variables: variables:
HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}"
DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}"
GITLAB_HELM_CHART_REF: "v4.6.3" GITLAB_HELM_CHART_REF: "v4.12.0"
environment: environment:
name: review/${CI_COMMIT_REF_SLUG}${FREQUENCY} name: review/${CI_COMMIT_REF_SLUG}${FREQUENCY}
url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}
@ -54,6 +54,7 @@ review-deploy:
extends: extends:
- .review-workflow-base - .review-workflow-base
- .review:rules:review-deploy - .review:rules:review-deploy
retry: 2
stage: review stage: review
needs: ["review-build-cng"] needs: ["review-build-cng"]
resource_group: "review/${CI_COMMIT_REF_NAME}" resource_group: "review/${CI_COMMIT_REF_NAME}"
@ -65,18 +66,21 @@ review-deploy:
- *base-before_script - *base-before_script
script: script:
- check_kube_domain - check_kube_domain
- ensure_namespace - "ensure_namespace ${KUBE_NAMESPACE}"
- install_external_dns - install_external_dns
- download_chart - download_chart
- date - date
- deploy || (display_deployment_debug && exit 1) - deploy || (display_deployment_debug && exit 1)
- verify_deploy || exit 1
- disable_sign_ups || (delete_release && exit 1) - disable_sign_ups || (delete_release && exit 1)
after_script: after_script:
# Run seed-dast-test-data.sh only when DAST_RUN is set to true. This is to pupulate review app with data for DAST scan. # Run seed-dast-test-data.sh only when DAST_RUN is set to true. This is to pupulate review app with data for DAST scan.
# Set DAST_RUN to true when jobs are manually scheduled. # Set DAST_RUN to true when jobs are manually scheduled.
- if [ "$DAST_RUN" == "true" ]; then source scripts/review_apps/seed-dast-test-data.sh; TRACE=1 trigger_proj_user_creation; fi - if [ "$DAST_RUN" == "true" ]; then source scripts/review_apps/seed-dast-test-data.sh; TRACE=1 trigger_proj_user_creation; fi
artifacts: artifacts:
paths: [environment_url.txt] paths:
- environment_url.txt
- curl_output.txt
expire_in: 7 days expire_in: 7 days
when: always when: always
@ -111,7 +115,6 @@ review-stop:
.review-qa-base: .review-qa-base:
extends: extends:
- .default-retry
- .use-docker-in-docker - .use-docker-in-docker
image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine-ruby-2.7 image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine-ruby-2.7
stage: qa stage: qa
@ -120,6 +123,7 @@ review-stop:
QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa" QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa"
QA_CAN_TEST_GIT_PROTOCOL_V2: "false" QA_CAN_TEST_GIT_PROTOCOL_V2: "false"
QA_DEBUG: "true" QA_DEBUG: "true"
QA_GENERATE_ALLURE_REPORT: "true"
GITLAB_USERNAME: "root" GITLAB_USERNAME: "root"
GITLAB_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" GITLAB_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}"
GITLAB_ADMIN_USERNAME: "root" GITLAB_ADMIN_USERNAME: "root"
@ -140,10 +144,32 @@ review-stop:
expire_in: 7 days expire_in: 7 days
when: always when: always
.allure-report-base:
image:
name: ${GITLAB_DEPENDENCY_PROXY}andrcuns/allure-report-publisher:0.3.2
entrypoint: [""]
stage: post-qa
variables:
GIT_STRATEGY: none
STORAGE_CREDENTIALS: $QA_ALLURE_REPORT_GCS_CREDENTIALS
GITLAB_AUTH_TOKEN: $GITLAB_QA_MR_ALLURE_REPORT_TOKEN
allow_failure: true
script:
- |
allure-report-publisher upload gcs \
--results-glob="qa/gitlab-qa-run-*/**/allure-results/*" \
--bucket="gitlab-qa-allure-reports" \
--prefix="$ALLURE_REPORT_PATH_PREFIX/$CI_COMMIT_REF_SLUG" \
--update-pr="comment" \
--copy-latest \
--ignore-missing-results \
--color
review-qa-smoke: review-qa-smoke:
extends: extends:
- .review-qa-base - .review-qa-base
- .review:rules:review-qa-smoke - .review:rules:review-qa-smoke
retry: 1 # This is confusing but this means "2 runs at max".
script: script:
- gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" - gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}"
@ -209,6 +235,24 @@ parallel-spec-reports:
junit: qa/gitlab-qa-run-*/**/rspec-*.xml junit: qa/gitlab-qa-run-*/**/rspec-*.xml
expire_in: 31d expire_in: 31d
allure-report-qa-smoke:
extends:
- .allure-report-base
- .review:rules:review-qa-smoke-report
needs: ["review-qa-smoke"]
variables:
ALLURE_REPORT_PATH_PREFIX: gitlab-review-smoke
ALLURE_JOB_NAME: review-qa-smoke
allure-report-qa-all:
extends:
- .allure-report-base
- .review:rules:review-qa-all-report
needs: ["review-qa-all"]
variables:
ALLURE_REPORT_PATH_PREFIX: gitlab-review-all
ALLURE_JOB_NAME: review-qa-all
danger-review: danger-review:
extends: extends:
- .default-retry - .default-retry

View file

@ -102,6 +102,7 @@
- ".gitlab/ci/build-images.gitlab-ci.yml" - ".gitlab/ci/build-images.gitlab-ci.yml"
- ".gitlab/ci/review.gitlab-ci.yml" - ".gitlab/ci/review.gitlab-ci.yml"
- "scripts/review_apps/base-config.yaml" - "scripts/review_apps/base-config.yaml"
- "scripts/review_apps/review-apps.sh"
- "scripts/trigger-build" - "scripts/trigger-build"
.ci-qa-patterns: &ci-qa-patterns .ci-qa-patterns: &ci-qa-patterns
@ -110,6 +111,9 @@
- ".gitlab/ci/build-images.gitlab-ci.yml" - ".gitlab/ci/build-images.gitlab-ci.yml"
- ".gitlab/ci/qa.gitlab-ci.yml" - ".gitlab/ci/qa.gitlab-ci.yml"
.gitaly-patterns: &gitaly-patterns
- "GITALY_SERVER_VERSION"
.workhorse-patterns: &workhorse-patterns .workhorse-patterns: &workhorse-patterns
- "GITLAB_WORKHORSE_VERSION" - "GITLAB_WORKHORSE_VERSION"
- "workhorse/**/*" - "workhorse/**/*"
@ -119,7 +123,7 @@
- ".gitlab-ci.yml" - ".gitlab-ci.yml"
- ".gitlab/ci/**/*.yml" - ".gitlab/ci/**/*.yml"
- "lib/gitlab/ci/templates/**/*.yml" - "lib/gitlab/ci/templates/**/*.yml"
- "{,ee/}changelogs/**/*.yml" - "{,ee/,jh/}changelogs/**/*.yml"
.docs-patterns: &docs-patterns .docs-patterns: &docs-patterns
- ".gitlab/route-map.yml" - ".gitlab/route-map.yml"
@ -138,7 +142,7 @@
- "config/webpack.config.js" - "config/webpack.config.js"
- "config/**/*.js" - "config/**/*.js"
- "vendor/assets/**/*" - "vendor/assets/**/*"
- "{,ee/}app/assets/**/*" - "{,ee/,jh/}app/assets/**/*"
.frontend-patterns: &frontend-patterns .frontend-patterns: &frontend-patterns
- "{package.json,yarn.lock}" - "{package.json,yarn.lock}"
@ -148,45 +152,48 @@
- "Dockerfile.assets" - "Dockerfile.assets"
- "config/**/*.js" - "config/**/*.js"
- "vendor/assets/**/*" - "vendor/assets/**/*"
- "{,ee/}{app/assets,app/helpers,app/presenters,app/views,locale,public,symbol}/**/*" - "{,ee/,jh/}{app/assets,app/helpers,app/presenters,app/views,locale,public,symbol}/**/*"
.startup-css-patterns: &startup-css-patterns
- "{,ee/,jh/}app/assets/stylesheets/startup/**/*"
.backend-patterns: &backend-patterns .backend-patterns: &backend-patterns
- "Gemfile{,.lock}" - "Gemfile{,.lock}"
- "Rakefile" - "Rakefile"
- "config.ru" - "config.ru"
# List explicitly all the app/ dirs that are backend (i.e. all except app/assets). # List explicitly all the app/ dirs that are backend (i.e. all except app/assets).
- "{,ee/}{app/channels,app/controllers,app/finders,app/graphql,app/helpers,app/mailers,app/models,app/policies,app/presenters,app/serializers,app/services,app/uploaders,app/validators,app/views,app/workers}/**/*" - "{,ee/,jh/}{app/channels,app/controllers,app/finders,app/graphql,app/helpers,app/mailers,app/models,app/policies,app/presenters,app/serializers,app/services,app/uploaders,app/validators,app/views,app/workers}/**/*"
- "{,ee/}{bin,cable,config,db,lib}/**/*" - "{,ee/,jh/}{bin,cable,config,db,lib}/**/*"
- "{,ee/}spec/**/*.rb" - "{,ee/,jh/}spec/**/*.rb"
# CI changes # CI changes
- ".gitlab-ci.yml" - ".gitlab-ci.yml"
- ".gitlab/ci/**/*" - ".gitlab/ci/**/*"
- "*_VERSION" - "*_VERSION"
.db-patterns: &db-patterns .db-patterns: &db-patterns
- "{,ee/}{,spec/}{db,migrations}/**/*" - "{,ee/,jh/}{,spec/}{db,migrations}/**/*"
- "{,ee/}{,spec/}lib/{,ee/}gitlab/database/**/*" - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/database/**/*"
- "{,ee/}{,spec/}lib/{,ee/}gitlab/database{,_spec}.rb" - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/database{,_spec}.rb"
- "{,ee/}{,spec/}lib/{,ee/}gitlab/background_migration/**/*" - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/background_migration/**/*"
- "{,ee/}{,spec/}lib/{,ee/}gitlab/background_migration{,_spec}.rb" - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/background_migration{,_spec}.rb"
- "{,ee/}spec/support/helpers/database/**/*" - "{,ee/,jh/}spec/support/helpers/database/**/*"
- "config/prometheus/common_metrics.yml" # Used by Gitlab::DatabaseImporters::CommonMetrics::Importer - "config/prometheus/common_metrics.yml" # Used by Gitlab::DatabaseImporters::CommonMetrics::Importer
- "{,ee/}app/models/project_statistics.rb" # Used to calculate sizes in migration specs - "{,ee/,jh/}app/models/project_statistics.rb" # Used to calculate sizes in migration specs
# CI changes # CI changes
- ".gitlab-ci.yml" - ".gitlab-ci.yml"
- ".gitlab/ci/**/*" - ".gitlab/ci/**/*"
.db-library-patterns: &db-library-patterns .db-library-patterns: &db-library-patterns
- "{,ee/}{,spec/}lib/{,ee/}gitlab/database/**/*" - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/database/**/*"
- "{,ee/}{,spec/}lib/{,ee/}gitlab/database{,_spec}.rb" - "{,ee/,jh/}{,spec/}lib/{,ee/,jh/}gitlab/database{,_spec}.rb"
- "{,ee/}spec/support/helpers/database/**/*" - "{,ee/,jh/}spec/support/helpers/database/**/*"
.backstage-patterns: &backstage-patterns .backstage-patterns: &backstage-patterns
- "Dangerfile" - "Dangerfile"
- "danger/**/*" - "danger/**/*"
- "{,ee/}fixtures/**/*" - "{,ee/,jh/}fixtures/**/*"
- "{,ee/}rubocop/**/*" - "{,ee/,jh/}rubocop/**/*"
- "{,ee/}spec/**/*" - "{,ee/,jh/}spec/**/*"
- "{,spec/}tooling/**/*" - "{,spec/}tooling/**/*"
.code-patterns: &code-patterns .code-patterns: &code-patterns
@ -206,7 +213,7 @@
- "Rakefile" - "Rakefile"
- "tests.yml" - "tests.yml"
- "config.ru" - "config.ru"
- "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" - "{,ee/,jh/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*"
- "doc/api/graphql/reference/*" # Files in this folder are auto-generated - "doc/api/graphql/reference/*" # Files in this folder are auto-generated
- "data/whats_new/*.yml" - "data/whats_new/*.yml"
@ -231,15 +238,15 @@
- "Rakefile" - "Rakefile"
- "tests.yml" - "tests.yml"
- "config.ru" - "config.ru"
- "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" - "{,ee/,jh/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*"
- "doc/api/graphql/reference/*" # Files in this folder are auto-generated - "doc/api/graphql/reference/*" # Files in this folder are auto-generated
- "data/whats_new/*.yml" - "data/whats_new/*.yml"
# Backstage changes # Backstage changes
- "Dangerfile" - "Dangerfile"
- "danger/**/*" - "danger/**/*"
- "{,ee/}fixtures/**/*" - "{,ee/,jh/}fixtures/**/*"
- "{,ee/}rubocop/**/*" - "{,ee/,jh/}rubocop/**/*"
- "{,ee/}spec/**/*" - "{,ee/,jh/}spec/**/*"
- "{,spec/}tooling/**/*" - "{,spec/}tooling/**/*"
.code-qa-patterns: &code-qa-patterns .code-qa-patterns: &code-qa-patterns
@ -259,7 +266,7 @@
- "Rakefile" - "Rakefile"
- "tests.yml" - "tests.yml"
- "config.ru" - "config.ru"
- "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" - "{,ee/,jh/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*"
- "doc/api/graphql/reference/*" # Files in this folder are auto-generated - "doc/api/graphql/reference/*" # Files in this folder are auto-generated
- "data/whats_new/*.yml" - "data/whats_new/*.yml"
# QA changes # QA changes
@ -283,15 +290,15 @@
- "Rakefile" - "Rakefile"
- "tests.yml" - "tests.yml"
- "config.ru" - "config.ru"
- "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" - "{,ee/,jh/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*"
- "doc/api/graphql/reference/*" # Files in this folder are auto-generated - "doc/api/graphql/reference/*" # Files in this folder are auto-generated
- "data/whats_new/*.yml" - "data/whats_new/*.yml"
# Backstage changes # Backstage changes
- "Dangerfile" - "Dangerfile"
- "danger/**/*" - "danger/**/*"
- "{,ee/}fixtures/**/*" - "{,ee/,jh/}fixtures/**/*"
- "{,ee/}rubocop/**/*" - "{,ee/,jh/}rubocop/**/*"
- "{,ee/}spec/**/*" - "{,ee/,jh/}spec/**/*"
- "{,spec/}tooling/**/*" - "{,spec/}tooling/**/*"
# QA changes # QA changes
- ".dockerignore" - ".dockerignore"
@ -306,6 +313,11 @@
- <<: *if-security-schedule - <<: *if-security-schedule
- <<: *if-merge-request-title-update-caches - <<: *if-merge-request-title-update-caches
.shared:rules:update-gitaly-binaries-cache:
rules:
- <<: *if-merge-request-title-update-caches
- changes: *gitaly-patterns
###################### ######################
# Build images rules # # Build images rules #
###################### ######################
@ -317,6 +329,8 @@
changes: *ci-build-images-patterns changes: *ci-build-images-patterns
- <<: *if-dot-com-gitlab-org-and-security-merge-request - <<: *if-dot-com-gitlab-org-and-security-merge-request
changes: *code-qa-patterns changes: *code-qa-patterns
- <<: *if-dot-com-gitlab-org-default-branch
changes: *code-qa-patterns
- <<: *if-dot-com-gitlab-org-schedule - <<: *if-dot-com-gitlab-org-schedule
.build-images:rules:build-assets-image: .build-images:rules:build-assets-image:
@ -439,6 +453,8 @@
changes: *code-backstage-patterns changes: *code-backstage-patterns
- <<: *if-merge-request-title-as-if-foss - <<: *if-merge-request-title-as-if-foss
- <<: *if-merge-request-title-run-all-rspec - <<: *if-merge-request-title-run-all-rspec
- <<: *if-merge-request
changes: *startup-css-patterns
- <<: *if-merge-request - <<: *if-merge-request
changes: *ci-patterns changes: *ci-patterns
@ -1130,6 +1146,20 @@
changes: *code-qa-patterns changes: *code-qa-patterns
allow_failure: true allow_failure: true
.review:rules:review-qa-smoke-report:
rules:
- <<: *if-not-ee
when: never
- <<: *if-dot-com-gitlab-org-merge-request
changes: *ci-review-patterns
when: always
- <<: *if-dot-com-gitlab-org-merge-request
changes: *frontend-patterns
when: always
- <<: *if-dot-com-gitlab-org-merge-request
changes: *code-qa-patterns
when: always
.review:rules:review-qa-all: .review:rules:review-qa-all:
rules: rules:
- <<: *if-not-ee - <<: *if-not-ee
@ -1142,6 +1172,19 @@
changes: *qa-patterns changes: *qa-patterns
allow_failure: true allow_failure: true
.review:rules:review-qa-all-report:
rules:
- <<: *if-not-ee
when: never
- <<: *if-dot-com-gitlab-org-merge-request
changes: *code-patterns
when: manual
allow_failure: true
- <<: *if-dot-com-gitlab-org-merge-request
changes: *qa-patterns
allow_failure: true
when: always
.review:rules:review-cleanup: .review:rules:review-cleanup:
rules: rules:
- <<: *if-not-ee - <<: *if-not-ee

View file

@ -1,26 +0,0 @@
untamper-my-lockfile:
image: registry.gitlab.com/gitlab-org/frontend/untamper-my-lockfile:main
stage: test
needs: []
before_script: []
after_script: []
cache: {}
retry: 1
script:
- untamper-my-lockfile --lockfile yarn.lock
rules:
# Create a pipeline if the branch is named 'add-untamper-my-lockfile' in
# order to have an integration check added in the MR that introduces it
- if: $CI_COMMIT_REF_NAME == "add-untamper-my-lockfile"
# Create a pipeline if there are changes in yarn.lock _and_ we are in a
# merge request _or_ branch pipeline.
#
# This ensures that the pipeline isn't run in scheduled jobs for example
#
# Also our best effort to support both branch and MR pipelines. In certain
# projects this might trigger _two_ pipelines. These projects can be fixed
# by adding proper workflow:rules
# https://docs.gitlab.com/ee/ci/yaml/#workflowrules
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH
changes:
- yarn.lock

View file

@ -10,5 +10,4 @@ lint-yaml:
variables: variables:
LINT_PATHS: .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates changelogs LINT_PATHS: .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates changelogs
script: script:
- '[[ ! -d "ee/" ]] || export LINT_PATHS="$LINT_PATHS ee/changelogs"'
- yamllint -f colored $LINT_PATHS - yamllint -f colored $LINT_PATHS

View file

@ -25,7 +25,7 @@
* Include use cases, benefits, and/or goals for this work. * Include use cases, benefits, and/or goals for this work.
* If adding content: What audience is it intended for? (What roles and scenarios?) * If adding content: What audience is it intended for? (What roles and scenarios?)
For ideas, see personas at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ or the persona labels at For ideas, see personas at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ or the persona labels at
https://gitlab.com/groups/gitlab-org/-/labels?utf8=%E2%9C%93&subscribed=&search=persona%3A https://gitlab.com/groups/gitlab-org/-/labels?subscribed=&search=persona%3A
--> -->
### Proposal ### Proposal

View file

@ -1,28 +0,0 @@
<!-- Title suggestion: [Feature flag] Remove FEATURE_FLAG_NAME -->
## Feature
The `:feature_name` feature flag was previously [enabled by default](URL) and should be removed.
## Owners
- Group: ~"group::GROUP_NAME"
- Slack channel: `#g_GROUP_NAME`
- DRI: USERNAME
- PM: USERNAME
**Removal**
This is an __important__ phase, that should be either done in the next Milestone or as soon as possible. For the cleanup phase, please follow our documentation on how to [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up).
- [ ] Remove `:feature_name` feature flag
- [ ] Remove all references to the feature flag from the codebase
- [ ] Remove the YAML definitions for the feature from the repository
- [ ] Create a Changelog Entry
- [ ] Clean up the feature flag from all environments by running this chatops command in `#production` channel `/chatops run feature delete some_feature`.
- [ ] Close this issue after the feature flag is removed from the codebase.
/label ~"feature flag" ~"technical debt"
/assign DRI

View file

@ -110,6 +110,12 @@ To do so, follow these steps:
the feature can be officially announced in a release blog post. the feature can be officially announced in a release blog post.
- [ ] `/chatops run auto_deploy status <merge-commit>` - [ ] `/chatops run auto_deploy status <merge-commit>`
- [ ] Close [the feature issue](ISSUE LINK) to indicate the feature will be released in the current milestone. - [ ] Close [the feature issue](ISSUE LINK) to indicate the feature will be released in the current milestone.
- [ ] Set the next milestone to this rollout issue for scheduling [the flag removal](#release-the-feature).
- [ ] (Optional) You can create a separate issue for scheduling the steps below to [Release the feature](#release-the-feature).
- [ ] Set the title to "[Feature flag] Cleanup `<feature-flag-name>`".
- [ ] Execute the `/copy_metadata <this-rollout-issue-link>` quick action to copy the labels from this rollout issue.
- [ ] Link this rollout issue as a related issue.
- [ ] Close this rollout issue.
**WARNING:** This approach has the downside that it makes it difficult for us to **WARNING:** This approach has the downside that it makes it difficult for us to
[clean up](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) the flag. [clean up](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) the flag.

View file

@ -513,6 +513,12 @@ That's all of the required database changes.
last_synced_at { 1.day.ago } last_synced_at { 1.day.ago }
retry_count { 0 } retry_count { 0 }
end end
trait :verification_succeeded do
verification_checksum { 'e079a831cab27bcda7d81cd9b48296d0c3dd92ef' }
verification_state { Geo::CoolWidgetRegistry.verification_state_value(:verification_succeeded) }
verified_at { 5.days.ago }
end
end end
end end
``` ```

View file

@ -479,6 +479,12 @@ That's all of the required database changes.
last_synced_at { 1.day.ago } last_synced_at { 1.day.ago }
retry_count { 0 } retry_count { 0 }
end end
trait :verification_succeeded do
verification_checksum { 'e079a831cab27bcda7d81cd9b48296d0c3dd92ef' }
verification_state { Geo::CoolWidgetRegistry.verification_state_value(:verification_succeeded) }
verified_at { 5.days.ago }
end
end end
end end
``` ```

View file

@ -52,8 +52,8 @@ All reviewers can help ensure accuracy, clarity, completeness, and adherence to
- [ ] Technical writer review. If not requested for this MR, must be scheduled post-merge. To request for this MR, assign the writer listed for the applicable [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages). - [ ] Technical writer review. If not requested for this MR, must be scheduled post-merge. To request for this MR, assign the writer listed for the applicable [DevOps stage](https://about.gitlab.com/handbook/product/categories/#devops-stages).
- [ ] Ensure docs metadata are present and up-to-date. - [ ] Ensure docs metadata are present and up-to-date.
- [ ] Ensure ~"Technical Writing" and ~"documentation" are added. - [ ] Ensure ~"Technical Writing" and ~"documentation" are added.
- [ ] Add the corresponding `docs::` [scoped label](https://gitlab.com/groups/gitlab-org/-/labels?utf8=%E2%9C%93&subscribed=&search=docs%3A%3A). - [ ] Add the corresponding `docs::` [scoped label](https://gitlab.com/groups/gitlab-org/-/labels?subscribed=&search=docs%3A%3A).
- [ ] If working on UI text, add the corresponding `UI Text` [scoped label](https://gitlab.com/groups/gitlab-org/-/labels?utf8=%E2%9C%93&subscribed=&search=ui+text). - [ ] If working on UI text, add the corresponding `UI Text` [scoped label](https://gitlab.com/groups/gitlab-org/-/labels?subscribed=&search=ui+text).
- [ ] Add ~"tw::doing" when starting work on the MR. - [ ] Add ~"tw::doing" when starting work on the MR.
- [ ] Add ~"tw::finished" if Technical Writing team work on the MR is complete but it remains open. - [ ] Add ~"tw::finished" if Technical Writing team work on the MR is complete but it remains open.

View file

@ -0,0 +1,38 @@
<!-- See Pipelines for the GitLab project: https://docs.gitlab.com/ee/development/pipelines.html -->
<!-- When in doubt about a Pipeline configuration change, feel free to ping @gl-quality/eng-prod. -->
## What does this MR do?
<!-- Briefly describe what this MR is about -->
## Related issues
<!-- Link related issues below. -->
## Check-list
### Pre-merge
Consider the effect of the changes in this merge request on the following:
- [ ] Different [pipeline types](https://docs.gitlab.com/ee/development/pipelines.html#pipelines-for-merge-requests)
- Non-canonical projects:
- [ ] `gitlab-foss`
- [ ] `security`
- [ ] `dev`
- [ ] personal forks
- [ ] [Pipeline performance](https://about.gitlab.com/handbook/engineering/quality/performance-indicators/#average-merge-request-pipeline-duration-for-gitlab)
**If new jobs are added:**
- [ ] Change-related rules (e.g. frontend/backend/database file changes): _____
- [ ] Frequency they are running (MRs, main branch, nightly, bi-hourly): _____
- [ ] Add a duration chart to https://app.periscopedata.com/app/gitlab/652085/Engineering-Productivity---Pipeline-Build-Durations if there are new jobs added to merge request pipelines
This will help keep track of expected cost increases to the [GitLab project average pipeline cost per merge request](https://about.gitlab.com/handbook/engineering/quality/performance-indicators/#gitlab-project-average-pipeline-cost-per-merge-request) RPI
### Post-merge
- [ ] Consider communicating these changes to the broader team following the [communication guideline for pipeline changes](https://about.gitlab.com/handbook/engineering/quality/engineering-productivity-team/#pipeline-changes)
/label ~tooling ~"tooling::pipelines" ~"Engineering Productivity"

View file

@ -16,7 +16,7 @@ See [the general developer security release guidelines](https://gitlab.com/gitla
- [ ] Merge request targets `master`, or a versioned stable branch (`X-Y-stable-ee`). - [ ] Merge request targets `master`, or a versioned stable branch (`X-Y-stable-ee`).
- [ ] Milestone is set for the version this merge request applies to. A closed milestone can be assigned via [quick actions]. - [ ] Milestone is set for the version this merge request applies to. A closed milestone can be assigned via [quick actions].
- [ ] Title of this merge request is the same as for all backports. - [ ] Title of this merge request is the same as for all backports.
- [ ] A [CHANGELOG entry] is added without a `merge_request` value, with `type` set to `security` - [ ] A [CHANGELOG entry] has been included, with `Changelog` trailer set to `security`.
- [ ] For the MR targeting `master`: - [ ] For the MR targeting `master`:
- [ ] Assign to a reviewer and maintainer, per our [Code Review process]. - [ ] Assign to a reviewer and maintainer, per our [Code Review process].
- [ ] Ensure it's approved according to our [Approval Guidelines]. - [ ] Ensure it's approved according to our [Approval Guidelines].
@ -37,7 +37,7 @@ See [the general developer security release guidelines](https://gitlab.com/gitla
[GitLab Security]: https://gitlab.com/gitlab-org/security/gitlab [GitLab Security]: https://gitlab.com/gitlab-org/security/gitlab
[quick actions]: https://docs.gitlab.com/ee/user/project/quick_actions.html#quick-actions-for-issues-merge-requests-and-epics [quick actions]: https://docs.gitlab.com/ee/user/project/quick_actions.html#quick-actions-for-issues-merge-requests-and-epics
[CHANGELOG entry]: https://docs.gitlab.com/ee/development/changelog.html [CHANGELOG entry]: https://docs.gitlab.com/ee/development/changelog.html#overview
[Code Review process]: https://docs.gitlab.com/ee/development/code_review.html [Code Review process]: https://docs.gitlab.com/ee/development/code_review.html
[Approval Guidelines]: https://docs.gitlab.com/ee/development/code_review.html#approval-guidelines [Approval Guidelines]: https://docs.gitlab.com/ee/development/code_review.html#approval-guidelines
[Canonical repository]: https://gitlab.com/gitlab-org/gitlab [Canonical repository]: https://gitlab.com/gitlab-org/gitlab

View file

@ -66,7 +66,6 @@
"Grafana", "Grafana",
"Gzip", "Gzip",
"Helm", "Helm",
"HipChat",
"ID", "ID",
"Ingress", "Ingress",
"jasmine-jquery", "jasmine-jquery",
@ -131,7 +130,6 @@
"Ubuntu", "Ubuntu",
"Ultra Auth", "Ultra Auth",
"Unicorn", "Unicorn",
"unicorn-worker-killer",
"URL", "URL",
"WebdriverIO", "WebdriverIO",
"YAML", "YAML",

View file

@ -36,8 +36,9 @@ AllCops:
- 'plugins/**/*' - 'plugins/**/*'
- 'file_hooks/**/*' - 'file_hooks/**/*'
- 'workhorse/**/*' - 'workhorse/**/*'
- 'spec/support/*.git/**/*' # e.g. spec/support/gitlab-git-test.git
CacheRootDirectory: tmp CacheRootDirectory: tmp
MaxFilesInCache: 18000 MaxFilesInCache: 25000
Cop/AvoidKeywordArgumentsInSidekiqWorkers: Cop/AvoidKeywordArgumentsInSidekiqWorkers:
Enabled: true Enabled: true
@ -89,6 +90,7 @@ RSpec/FilePath:
- 'spec/frontend/fixtures/*' - 'spec/frontend/fixtures/*'
- 'ee/spec/frontend/fixtures/*' - 'ee/spec/frontend/fixtures/*'
- 'spec/requests/api/v3/*' - 'spec/requests/api/v3/*'
- 'spec/fixtures/**/*'
# Configuration parameters: AllowSubject. # Configuration parameters: AllowSubject.
RSpec/MultipleMemoizedHelpers: RSpec/MultipleMemoizedHelpers:
@ -663,3 +665,8 @@ Style/RegexpLiteralMixedPreserve:
- mixed - mixed
- mixed_preserve - mixed_preserve
EnforcedStyle: mixed_preserve EnforcedStyle: mixed_preserve
RSpec/TopLevelDescribePath:
Exclude:
- 'spec/fixtures/**/*.rb'
- 'ee/spec/fixtures/**/*.rb'

View file

@ -13,9 +13,6 @@
# WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/322903 # WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/322903
Graphql/Descriptions: Graphql/Descriptions:
Exclude: Exclude:
- 'app/graphql/types/snippets/blob_action_enum.rb'
- 'app/graphql/types/snippets/visibility_scopes_enum.rb'
- 'ee/app/graphql/ee/types/list_limit_metric_enum.rb'
- 'ee/app/graphql/types/epic_state_enum.rb' - 'ee/app/graphql/types/epic_state_enum.rb'
- 'ee/app/graphql/types/health_status_enum.rb' - 'ee/app/graphql/types/health_status_enum.rb'
- 'ee/app/graphql/types/iteration_state_enum.rb' - 'ee/app/graphql/types/iteration_state_enum.rb'
@ -31,8 +28,6 @@ Graphql/Descriptions:
# WIP: See https://gitlab.com/gitlab-org/gitlab/-/issues/220040 # WIP: See https://gitlab.com/gitlab-org/gitlab/-/issues/220040
Rails/SaveBang: Rails/SaveBang:
Exclude: Exclude:
- 'ee/spec/controllers/projects/merge_requests_controller_spec.rb'
- 'ee/spec/controllers/subscriptions_controller_spec.rb'
- 'ee/spec/initializers/fog_google_https_private_urls_spec.rb' - '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/ee/gitlab/auth/ldap/sync/group_spec.rb' - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb'
@ -157,11 +152,7 @@ Rails/SaveBang:
- 'spec/lib/gitlab/shard_health_cache_spec.rb' - 'spec/lib/gitlab/shard_health_cache_spec.rb'
- 'spec/mailers/notify_spec.rb' - 'spec/mailers/notify_spec.rb'
- 'spec/models/clusters/applications/helm_spec.rb' - 'spec/models/clusters/applications/helm_spec.rb'
- 'spec/models/container_repository_spec.rb'
- 'spec/models/design_management/version_spec.rb' - 'spec/models/design_management/version_spec.rb'
- 'spec/models/diff_discussion_spec.rb'
- 'spec/models/diff_note_spec.rb'
- 'spec/models/email_spec.rb'
- 'spec/models/environment_spec.rb' - 'spec/models/environment_spec.rb'
- 'spec/models/event_spec.rb' - 'spec/models/event_spec.rb'
- 'spec/models/fork_network_spec.rb' - 'spec/models/fork_network_spec.rb'
@ -170,10 +161,6 @@ Rails/SaveBang:
- 'spec/models/group_spec.rb' - 'spec/models/group_spec.rb'
- 'spec/models/identity_spec.rb' - 'spec/models/identity_spec.rb'
- 'spec/models/jira_import_state_spec.rb' - 'spec/models/jira_import_state_spec.rb'
- 'spec/models/key_spec.rb'
- 'spec/models/lfs_objects_project_spec.rb'
- 'spec/models/merge_request_spec.rb'
- 'spec/models/milestone_spec.rb'
- 'spec/models/namespace_spec.rb' - 'spec/models/namespace_spec.rb'
- 'spec/models/note_spec.rb' - 'spec/models/note_spec.rb'
- 'spec/models/notification_setting_spec.rb' - 'spec/models/notification_setting_spec.rb'
@ -385,7 +372,6 @@ RSpec/EmptyLineAfterFinalLetItBe:
- ee/spec/requests/api/commits_spec.rb - ee/spec/requests/api/commits_spec.rb
- ee/spec/requests/api/dora/metrics_spec.rb - ee/spec/requests/api/dora/metrics_spec.rb
- ee/spec/requests/api/epics_spec.rb - ee/spec/requests/api/epics_spec.rb
- ee/spec/requests/api/external_approval_rules_spec.rb
- ee/spec/requests/api/geo_spec.rb - ee/spec/requests/api/geo_spec.rb
- ee/spec/requests/api/graphql/boards/epic_board_list_epics_query_spec.rb - ee/spec/requests/api/graphql/boards/epic_board_list_epics_query_spec.rb
- ee/spec/requests/api/graphql/current_user/todos_query_spec.rb - ee/spec/requests/api/graphql/current_user/todos_query_spec.rb
@ -449,9 +435,9 @@ RSpec/EmptyLineAfterFinalLetItBe:
- ee/spec/services/dast_scanner_profiles/destroy_service_spec.rb - ee/spec/services/dast_scanner_profiles/destroy_service_spec.rb
- ee/spec/services/dast_scanner_profiles/update_service_spec.rb - ee/spec/services/dast_scanner_profiles/update_service_spec.rb
- ee/spec/services/dast_site_profiles/destroy_service_spec.rb - ee/spec/services/dast_site_profiles/destroy_service_spec.rb
- ee/spec/services/external_approval_rules/create_service_spec.rb - ee/spec/services/external_status_checks/create_service_spec.rb
- ee/spec/services/external_approval_rules/destroy_service_spec.rb - ee/spec/services/external_status_checks/destroy_service_spec.rb
- ee/spec/services/external_approval_rules/update_service_spec.rb - ee/spec/services/external_status_checks/update_service_spec.rb
- ee/spec/services/gitlab_subscriptions/activate_service_spec.rb - ee/spec/services/gitlab_subscriptions/activate_service_spec.rb
- ee/spec/services/gitlab_subscriptions/apply_trial_service_spec.rb - ee/spec/services/gitlab_subscriptions/apply_trial_service_spec.rb
- ee/spec/services/incident_management/incidents/upload_metric_service_spec.rb - ee/spec/services/incident_management/incidents/upload_metric_service_spec.rb
@ -732,7 +718,6 @@ RSpec/EmptyLineAfterFinalLetItBe:
- spec/services/wiki_pages/event_create_service_spec.rb - spec/services/wiki_pages/event_create_service_spec.rb
- spec/support/shared_examples/graphql/design_fields_shared_examples.rb - spec/support/shared_examples/graphql/design_fields_shared_examples.rb
- spec/support/shared_examples/graphql/mutations/set_assignees_shared_examples.rb - spec/support/shared_examples/graphql/mutations/set_assignees_shared_examples.rb
- spec/support/shared_examples/models/slack_mattermost_notifications_shared_examples.rb
- spec/support/shared_examples/quick_actions/issuable/issuable_quick_actions_shared_examples.rb - spec/support/shared_examples/quick_actions/issuable/issuable_quick_actions_shared_examples.rb
- spec/support/shared_examples/services/container_registry_auth_service_shared_examples.rb - spec/support/shared_examples/services/container_registry_auth_service_shared_examples.rb
- spec/support/shared_examples/services/packages_shared_examples.rb - spec/support/shared_examples/services/packages_shared_examples.rb
@ -771,7 +756,6 @@ RSpec/TimecopFreeze:
- 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/group/stage_time_summary_spec.rb' - 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/group/stage_time_summary_spec.rb'
- 'ee/spec/lib/gitlab/analytics/type_of_work/tasks_by_type_spec.rb' - 'ee/spec/lib/gitlab/analytics/type_of_work/tasks_by_type_spec.rb'
- 'ee/spec/lib/gitlab/auth/group_saml/sso_enforcer_spec.rb' - 'ee/spec/lib/gitlab/auth/group_saml/sso_enforcer_spec.rb'
- 'ee/spec/lib/gitlab/database/load_balancing/host_spec.rb'
- 'ee/spec/lib/gitlab/geo/base_request_spec.rb' - 'ee/spec/lib/gitlab/geo/base_request_spec.rb'
- 'ee/spec/lib/gitlab/geo/event_gap_tracking_spec.rb' - 'ee/spec/lib/gitlab/geo/event_gap_tracking_spec.rb'
- 'ee/spec/lib/gitlab/geo/git_push_http_spec.rb' - 'ee/spec/lib/gitlab/geo/git_push_http_spec.rb'
@ -882,7 +866,6 @@ RSpec/AnyInstanceOf:
- 'ee/spec/features/issues/form_spec.rb' - 'ee/spec/features/issues/form_spec.rb'
- 'ee/spec/features/merge_request/user_creates_merge_request_spec.rb' - 'ee/spec/features/merge_request/user_creates_merge_request_spec.rb'
- 'ee/spec/features/projects/new_project_spec.rb' - 'ee/spec/features/projects/new_project_spec.rb'
- 'ee/spec/features/projects/services/user_activates_jira_spec.rb'
- 'ee/spec/features/registrations/welcome_spec.rb' - 'ee/spec/features/registrations/welcome_spec.rb'
- 'ee/spec/features/security/project/internal_access_spec.rb' - 'ee/spec/features/security/project/internal_access_spec.rb'
- 'ee/spec/features/security/project/private_access_spec.rb' - 'ee/spec/features/security/project/private_access_spec.rb'
@ -1161,6 +1144,8 @@ RSpec/AnyInstanceOf:
- 'spec/models/hooks/service_hook_spec.rb' - 'spec/models/hooks/service_hook_spec.rb'
- 'spec/models/hooks/system_hook_spec.rb' - 'spec/models/hooks/system_hook_spec.rb'
- 'spec/models/hooks/web_hook_spec.rb' - 'spec/models/hooks/web_hook_spec.rb'
- 'spec/models/integrations/jira_spec.rb'
- 'spec/models/integrations/mattermost_slash_commands_spec.rb'
- 'spec/models/issue_spec.rb' - 'spec/models/issue_spec.rb'
- 'spec/models/key_spec.rb' - 'spec/models/key_spec.rb'
- 'spec/models/member_spec.rb' - 'spec/models/member_spec.rb'
@ -1168,8 +1153,6 @@ RSpec/AnyInstanceOf:
- 'spec/models/merge_request_spec.rb' - 'spec/models/merge_request_spec.rb'
- 'spec/models/note_spec.rb' - 'spec/models/note_spec.rb'
- 'spec/models/project_import_state_spec.rb' - 'spec/models/project_import_state_spec.rb'
- 'spec/models/project_services/jira_service_spec.rb'
- 'spec/models/project_services/mattermost_slash_commands_service_spec.rb'
- 'spec/models/project_spec.rb' - 'spec/models/project_spec.rb'
- 'spec/models/repository_spec.rb' - 'spec/models/repository_spec.rb'
- 'spec/models/user_spec.rb' - 'spec/models/user_spec.rb'
@ -1302,8 +1285,8 @@ RSpec/AnyInstanceOf:
- 'spec/support/shared_examples/features/snippets_shared_examples.rb' - 'spec/support/shared_examples/features/snippets_shared_examples.rb'
- 'spec/support/shared_examples/lib/gitlab/ci/ci_trace_shared_examples.rb' - 'spec/support/shared_examples/lib/gitlab/ci/ci_trace_shared_examples.rb'
- 'spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb' - 'spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb'
- 'spec/support/shared_examples/models/chat_slash_commands_shared_examples.rb'
- 'spec/support/shared_examples/models/diff_note_after_commit_shared_examples.rb' - 'spec/support/shared_examples/models/diff_note_after_commit_shared_examples.rb'
- 'spec/support/shared_examples/models/integrations/base_slash_commands_shared_examples.rb'
- 'spec/support/shared_examples/models/mentionable_shared_examples.rb' - 'spec/support/shared_examples/models/mentionable_shared_examples.rb'
- 'spec/support/shared_examples/models/with_uploads_shared_examples.rb' - 'spec/support/shared_examples/models/with_uploads_shared_examples.rb'
- 'spec/support/shared_examples/path_extraction_shared_examples.rb' - 'spec/support/shared_examples/path_extraction_shared_examples.rb'
@ -1320,7 +1303,6 @@ RSpec/AnyInstanceOf:
- 'spec/support/shared_examples/workers/authorized_projects_worker_shared_example.rb' - 'spec/support/shared_examples/workers/authorized_projects_worker_shared_example.rb'
- 'spec/support/shared_examples/workers/reactive_cacheable_shared_examples.rb' - 'spec/support/shared_examples/workers/reactive_cacheable_shared_examples.rb'
- 'spec/support/snowplow.rb' - 'spec/support/snowplow.rb'
- 'spec/support/unicorn.rb'
- 'spec/tasks/gitlab/cleanup_rake_spec.rb' - 'spec/tasks/gitlab/cleanup_rake_spec.rb'
- 'spec/tasks/gitlab/container_registry_rake_spec.rb' - 'spec/tasks/gitlab/container_registry_rake_spec.rb'
- 'spec/tasks/gitlab/db_rake_spec.rb' - 'spec/tasks/gitlab/db_rake_spec.rb'
@ -1602,6 +1584,7 @@ Gitlab/NamespacedClass:
- 'app/models/list_user_preference.rb' - 'app/models/list_user_preference.rb'
- 'app/models/member.rb' - 'app/models/member.rb'
- 'app/models/members/group_member.rb' - 'app/models/members/group_member.rb'
- 'app/models/members/last_group_owner_assigner.rb'
- 'app/models/members/project_member.rb' - 'app/models/members/project_member.rb'
- 'app/models/members_preloader.rb' - 'app/models/members_preloader.rb'
- 'app/models/merge_request.rb' - 'app/models/merge_request.rb'
@ -1658,48 +1641,9 @@ Gitlab/NamespacedClass:
- 'app/models/project_pages_metadatum.rb' - 'app/models/project_pages_metadatum.rb'
- 'app/models/project_repository.rb' - 'app/models/project_repository.rb'
- 'app/models/project_repository_storage_move.rb' - 'app/models/project_repository_storage_move.rb'
- 'app/models/project_services/alerts_service.rb'
- 'app/models/project_services/alerts_service_data.rb'
- 'app/models/project_services/bugzilla_service.rb'
- 'app/models/project_services/buildkite_service.rb'
- 'app/models/project_services/chat_notification_service.rb'
- 'app/models/project_services/ci_service.rb'
- 'app/models/project_services/custom_issue_tracker_service.rb'
- 'app/models/project_services/discord_service.rb'
- 'app/models/project_services/drone_ci_service.rb'
- 'app/models/project_services/ewm_service.rb'
- 'app/models/project_services/external_wiki_service.rb'
- 'app/models/project_services/flowdock_service.rb'
- 'app/models/project_services/hangouts_chat_service.rb'
- 'app/models/project_services/hipchat_service.rb'
- 'app/models/project_services/irker_service.rb'
- 'app/models/project_services/issue_tracker_data.rb'
- 'app/models/project_services/issue_tracker_service.rb'
- 'app/models/project_services/jenkins_service.rb'
- 'app/models/project_services/jira_service.rb'
- 'app/models/project_services/jira_tracker_data.rb'
- 'app/models/project_services/mattermost_service.rb'
- 'app/models/project_services/mattermost_slash_commands_service.rb'
- 'app/models/project_services/microsoft_teams_service.rb'
- 'app/models/project_services/mock_ci_service.rb'
- 'app/models/project_services/mock_deployment_service.rb'
- 'app/models/project_services/mock_monitoring_service.rb' - 'app/models/project_services/mock_monitoring_service.rb'
- 'app/models/project_services/monitoring_service.rb' - 'app/models/project_services/monitoring_service.rb'
- 'app/models/project_services/open_project_service.rb'
- 'app/models/project_services/open_project_tracker_data.rb'
- 'app/models/project_services/packagist_service.rb'
- 'app/models/project_services/pipelines_email_service.rb'
- 'app/models/project_services/pivotaltracker_service.rb'
- 'app/models/project_services/prometheus_service.rb' - 'app/models/project_services/prometheus_service.rb'
- 'app/models/project_services/pushover_service.rb'
- 'app/models/project_services/redmine_service.rb'
- 'app/models/project_services/slack_service.rb'
- 'app/models/project_services/slack_slash_commands_service.rb'
- 'app/models/project_services/slash_commands_service.rb'
- 'app/models/project_services/teamcity_service.rb'
- 'app/models/project_services/unify_circuit_service.rb'
- 'app/models/project_services/webex_teams_service.rb'
- 'app/models/project_services/youtrack_service.rb'
- 'app/models/project_setting.rb' - 'app/models/project_setting.rb'
- 'app/models/project_snippet.rb' - 'app/models/project_snippet.rb'
- 'app/models/project_statistics.rb' - 'app/models/project_statistics.rb'
@ -2404,11 +2348,6 @@ Gitlab/NamespacedClass:
- 'ee/app/models/project_alias.rb' - 'ee/app/models/project_alias.rb'
- 'ee/app/models/project_repository_state.rb' - 'ee/app/models/project_repository_state.rb'
- 'ee/app/models/project_security_setting.rb' - 'ee/app/models/project_security_setting.rb'
- 'ee/app/models/project_services/github_service.rb'
- 'ee/app/models/project_services/github_service/remote_project.rb'
- 'ee/app/models/project_services/github_service/status_message.rb'
- 'ee/app/models/project_services/github_service/status_notifier.rb'
- 'ee/app/models/project_services/gitlab_slack_application_service.rb'
- 'ee/app/models/protected_environment.rb' - 'ee/app/models/protected_environment.rb'
- 'ee/app/models/push_rule.rb' - 'ee/app/models/push_rule.rb'
- 'ee/app/models/resource_iteration_event.rb' - 'ee/app/models/resource_iteration_event.rb'
@ -2533,7 +2472,6 @@ Gitlab/NamespacedClass:
- 'ee/app/workers/elastic_full_index_worker.rb' - 'ee/app/workers/elastic_full_index_worker.rb'
- 'ee/app/workers/elastic_index_bulk_cron_worker.rb' - 'ee/app/workers/elastic_index_bulk_cron_worker.rb'
- 'ee/app/workers/elastic_index_initial_bulk_cron_worker.rb' - 'ee/app/workers/elastic_index_initial_bulk_cron_worker.rb'
- 'ee/app/workers/elastic_indexer_worker.rb'
- 'ee/app/workers/elastic_indexing_control_worker.rb' - 'ee/app/workers/elastic_indexing_control_worker.rb'
- 'ee/app/workers/elastic_namespace_indexer_worker.rb' - 'ee/app/workers/elastic_namespace_indexer_worker.rb'
- 'ee/app/workers/elastic_namespace_rollout_worker.rb' - 'ee/app/workers/elastic_namespace_rollout_worker.rb'
@ -2699,7 +2637,6 @@ Performance/OpenStruct:
- 'ee/lib/gitlab/graphql/aggregations/epics/epic_node.rb' - 'ee/lib/gitlab/graphql/aggregations/epics/epic_node.rb'
- 'lib/api/wikis.rb' - 'lib/api/wikis.rb'
- 'lib/gitlab/ci/ansi2html.rb' - 'lib/gitlab/ci/ansi2html.rb'
- 'lib/gitlab/ci/reports/test_suite_comparer.rb'
- 'lib/gitlab/git/diff_collection.rb' - 'lib/gitlab/git/diff_collection.rb'
- 'lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb' - 'lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb'
- 'lib/gitlab/testing/request_inspector_middleware.rb' - 'lib/gitlab/testing/request_inspector_middleware.rb'
@ -2712,8 +2649,8 @@ Gitlab/DelegatePredicateMethods:
- 'app/models/clusters/platforms/kubernetes.rb' - 'app/models/clusters/platforms/kubernetes.rb'
- 'app/models/concerns/ci/metadatable.rb' - 'app/models/concerns/ci/metadatable.rb'
- 'app/models/concerns/diff_positionable_note.rb' - 'app/models/concerns/diff_positionable_note.rb'
- 'app/models/concerns/integrations/base_data_fields.rb'
- 'app/models/concerns/resolvable_discussion.rb' - 'app/models/concerns/resolvable_discussion.rb'
- 'app/models/concerns/services/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/ee/group.rb' - 'ee/app/models/ee/group.rb'
@ -2888,7 +2825,7 @@ Gitlab/FeatureAvailableUsage:
- 'ee/app/views/shared/promotions/_promote_repository_features.html.haml' - 'ee/app/views/shared/promotions/_promote_repository_features.html.haml'
- 'ee/app/workers/analytics/code_review_metrics_worker.rb' - 'ee/app/workers/analytics/code_review_metrics_worker.rb'
- 'ee/app/workers/group_saml_group_sync_worker.rb' - 'ee/app/workers/group_saml_group_sync_worker.rb'
- 'ee/lib/api/external_approval_rules.rb' - 'ee/lib/api/external_status_checks.rb'
- 'ee/lib/ee/api/entities/approval_state.rb' - 'ee/lib/ee/api/entities/approval_state.rb'
- 'ee/lib/ee/api/entities/board.rb' - 'ee/lib/ee/api/entities/board.rb'
- 'ee/lib/ee/api/entities/issue.rb' - 'ee/lib/ee/api/entities/issue.rb'
@ -2936,8 +2873,6 @@ Style/RegexpLiteralMixedPreserve:
- 'ee/spec/controllers/groups/groups_controller_spec.rb' - 'ee/spec/controllers/groups/groups_controller_spec.rb'
- 'ee/spec/features/groups/saml_enforcement_spec.rb' - 'ee/spec/features/groups/saml_enforcement_spec.rb'
- 'ee/spec/features/markdown/metrics_spec.rb' - 'ee/spec/features/markdown/metrics_spec.rb'
- 'ee/spec/lib/gitlab/database/load_balancing/load_balancer_spec.rb'
- 'ee/spec/models/project_services/jira_service_spec.rb'
- 'ee/spec/services/jira/requests/issues/list_service_spec.rb' - 'ee/spec/services/jira/requests/issues/list_service_spec.rb'
- 'lib/api/invitations.rb' - 'lib/api/invitations.rb'
- 'lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb' - 'lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb'
@ -2966,5 +2901,4 @@ Style/RegexpLiteralMixedPreserve:
- 'spec/support/helpers/grafana_api_helpers.rb' - 'spec/support/helpers/grafana_api_helpers.rb'
- 'spec/support/helpers/query_recorder.rb' - 'spec/support/helpers/query_recorder.rb'
- 'spec/support/helpers/require_migration.rb' - 'spec/support/helpers/require_migration.rb'
- 'spec/support/shared_examples/models/slack_mattermost_notifications_shared_examples.rb'
- 'spec/views/layouts/_head.html.haml_spec.rb' - 'spec/views/layouts/_head.html.haml_spec.rb'

View file

@ -152,7 +152,7 @@ Lint/MissingCopEnableDirective:
Lint/MixedRegexpCaptureTypes: Lint/MixedRegexpCaptureTypes:
Exclude: Exclude:
- 'app/models/alert_management/alert.rb' - 'app/models/alert_management/alert.rb'
- 'app/models/project_services/ewm_service.rb' - 'app/models/integrations/ewm.rb'
- 'app/uploaders/file_uploader.rb' - 'app/uploaders/file_uploader.rb'
- 'ee/lib/gitlab/code_owners/reference_extractor.rb' - 'ee/lib/gitlab/code_owners/reference_extractor.rb'
- 'lib/gitlab/ci/pipeline/expression/lexeme/string.rb' - 'lib/gitlab/ci/pipeline/expression/lexeme/string.rb'
@ -742,11 +742,6 @@ Style/ExplicitBlockArgument:
Style/FormatString: Style/FormatString:
Enabled: false Enabled: false
# Offense count: 67
# Cop supports --auto-correct.
Style/GlobalStdStream:
Enabled: false
# Offense count: 897 # Offense count: 897
# Configuration parameters: MinBodyLength. # Configuration parameters: MinBodyLength.
Style/GuardClause: Style/GuardClause:

View file

@ -3,6 +3,7 @@
"ignoreFiles": [ "ignoreFiles": [
"app/assets/stylesheets/pages/emojis.scss", "app/assets/stylesheets/pages/emojis.scss",
"app/assets/stylesheets/startup/startup-*.scss", "app/assets/stylesheets/startup/startup-*.scss",
"ee/app/assets/stylesheets/startup/startup-*.scss",
"app/assets/stylesheets/lazy_bundles/select2.scss", "app/assets/stylesheets/lazy_bundles/select2.scss",
"app/assets/stylesheets/highlight/themes/*.scss", "app/assets/stylesheets/highlight/themes/*.scss",
"app/assets/stylesheets/lazy_bundles/cropper.css" "app/assets/stylesheets/lazy_bundles/cropper.css"

View file

@ -2,73 +2,770 @@
documentation](doc/development/changelog.md) for instructions on adding your own documentation](doc/development/changelog.md) for instructions on adding your own
entry. entry.
## 13.12.9 (2021-08-03) ## 14.0.10 (2021-09-02)
### Security (15 changes) No changes.
- [Add project member validation for domain limitation](gitlab-org/security/gitlab@8aff1815f897c2c454c87b1ccdd98c7a2c9eedb3) ([merge request](gitlab-org/security/gitlab!1562)) ## 14.0.9 (2021-08-31)
- [Block impersonation token use if it is not permitted](gitlab-org/security/gitlab@99ab170ae5a2d991600dec9e7dfd8b5ca502c437) ([merge request](gitlab-org/security/gitlab!1585))
- [Hide project-level CI/CD Analytics for Guests](gitlab-org/security/gitlab@740395d9663be41d52d831b8f90e271c08137220) ([merge request](gitlab-org/security/gitlab!1575))
- [Only allow invite to be accepted by user with matching email](gitlab-org/security/gitlab@ae7ade09920486f6124496d800bf5f63f5a909eb) ([merge request](gitlab-org/security/gitlab!1634))
- [Configure OmniAuth to use GitLab AppLogger](gitlab-org/security/gitlab@ed5e7742173878e59d760744e3f4f6686268584b) ([merge request](gitlab-org/security/gitlab!1617))
- [Fix Protected Environment Accesses Cleanup](gitlab-org/security/gitlab@79eb0cb13a35864267c30663fd6033e8c6224cac) ([merge request](gitlab-org/security/gitlab!1608)) **GitLab Enterprise Edition**
- [Add permissions check to pipelines#show action](gitlab-org/security/gitlab@1a293b409226ce743527f1ac5ac5d216998339e1) ([merge request](gitlab-org/security/gitlab!1618))
- [Prevent impersonation in gitlab-shell SSH certs](gitlab-org/security/gitlab@42521d9e7e72047bac09bd42779203ae6e508227) ([merge request](gitlab-org/security/gitlab!1611))
- [Prevent guests from linking issues with errors](gitlab-org/security/gitlab@da799b0c7bcade058d4b57e065b1a1bebf903fa3) ([merge request](gitlab-org/security/gitlab!1599))
- [Do not show email address in error message](gitlab-org/security/gitlab@2c3318edaa39ed0837b8fb30acae9f2cdc3d158f) ([merge request](gitlab-org/security/gitlab!1598)) **GitLab Enterprise Edition**
- [Updates oauth to 0.5.6](gitlab-org/security/gitlab@33df3791b646026016303a9d64661fbee7563630) ([merge request](gitlab-org/security/gitlab!1569))
- [Remove impersonation token from api response for non-admin user](gitlab-org/security/gitlab@b56ae1953b2cd6b9d12c584e0f2c298a931f6f08) ([merge request](gitlab-org/security/gitlab!1567))
- [Filter todos whose target users no longer have access to](gitlab-org/security/gitlab@ba613574b12e40fb61e5fbae8b1159f9ad037e84) ([merge request](gitlab-org/security/gitlab!1555))
- [Fix tag ref detection for pipelines](gitlab-org/security/gitlab@4c36e98bcecd6e42e23ec5e20443f41de7f5bf18) ([merge request](gitlab-org/security/gitlab!1549))
- [Fix XSS in Mermaid Markdown rendering](gitlab-org/security/gitlab@b27425816723b53db2f65b39f4702711b858cdfc) ([merge request](gitlab-org/security/gitlab!1487))
## 13.12.8 (2021-07-07) ### Security (9 changes)
### Security (1 change) - [Update apollo_upload_server dependency](gitlab-org/security/gitlab@ced741d93fa664f0c152f524949258bf969b7667) ([merge request](gitlab-org/security/gitlab!1701))
- [Ensure shared group members lose project access after group deletion](gitlab-org/security/gitlab@3a41f4e29c01188aaaf01ab5e3deec2a9eeed18e) ([merge request](gitlab-org/security/gitlab!1685))
- [Fix stored XSS vulnerability in Datadog settings form](gitlab-org/security/gitlab@269e5bf96b5e97c3b8e6f6b8b3f593d958de2ecb) ([merge request](gitlab-org/security/gitlab!1672))
- [Inherit user external status while creating project bots](gitlab-org/security/gitlab@5bae4e53bd4c363270b2fc2e308b81d2a2a388a6) ([merge request](gitlab-org/security/gitlab!1666))
- [Escape issue reference and title for Jira issues](gitlab-org/security/gitlab@0397f2b393d563559c49c39c0ba1d192d08a10d7) ([merge request](gitlab-org/security/gitlab!1663)) **GitLab Enterprise Edition**
- [Require sign in for .keys endpoint on non-public instances](gitlab-org/security/gitlab@13a7f6001f663b3745159fa37b518ba4a43355bd) ([merge request](gitlab-org/security/gitlab!1659))
- [Update Import/Export to use public email when mapping users](gitlab-org/security/gitlab@f3d1b800af55986cef83aeaf4df1312e3070f0c5) ([merge request](gitlab-org/security/gitlab!1654)) **GitLab Enterprise Edition**
- [Only create jira connect NS subscriptions for admins](gitlab-org/security/gitlab@34bdcd45f24eaa051702834fb6c3568e45721004) ([merge request](gitlab-org/security/gitlab!1647))
- [Prevent non-admins from configuring Jira connect app](gitlab-org/security/gitlab@4af692246224b1cd1e2fe3c6d0ac2613c0f8fe39) ([merge request](gitlab-org/security/gitlab!1643))
- [Disable file and network premailer strategies](gitlab-org/security/gitlab@ee69d6d6950bb116cb31523ca805e78af431c25c) ([merge request](gitlab-org/security/gitlab!1545)) ## 14.0.8 (2021-08-25)
## 13.12.7 (2021-07-05) ### Fixed (1 change)
### Fixed (2 changes) - [Fix: Sidekiq workers delete each other's metrics](gitlab-org/gitlab@98a85fcbcdf2f8dfef83e552a850591e8952c057) ([merge request](gitlab-org/gitlab!68761))
- [Fix state value in the lfs_object_registry table](gitlab-org/gitlab@feca70558108299a9b7b499e4461b59b7c140ef7) ([merge request](gitlab-org/gitlab!65466)) **GitLab Enterprise Edition**
- [Fix pages deployment storage migration](gitlab-org/gitlab@4e806a7b5e0eef8d88bcdb68724c6b7bf3c08293) ([merge request](gitlab-org/gitlab!65366))
### Changed (1 change) ### Changed (1 change)
- [Move migration to a pre-deployment migration](gitlab-org/gitlab@d02fcd44b3dd797e18221e4e91ab913372bdf18a) ([merge request](gitlab-org/gitlab!65466)) **GitLab Enterprise Edition** - [Resolve "operator does not exist: integer[] || bigint in...](gitlab-org/gitlab@273cc43f7928e89fd11237b58fdfdfb8a24e5493) ([merge request](gitlab-org/gitlab!68761))
## 13.12.6 (2021-07-01) ### Other (1 change)
- [Revert backfill on ci_build_trace_sections](gitlab-org/gitlab@10a5ad9dce9014eb8af6493402dcdd1658dbd62a) ([merge request](gitlab-org/gitlab!68761))
## 14.0.7 (2021-08-03)
### Security (18 changes)
- [Add project member validation for domain limitation](gitlab-org/security/gitlab@f9a0e78111cbbfe93b6f8ca27bd9f064e146d005) ([merge request](gitlab-org/security/gitlab!1563))
- [Hide project-level CI/CD Analytics for Guests](gitlab-org/security/gitlab@56a17ae80c1f179bcdf939d6b8e71737f9501949) ([merge request](gitlab-org/security/gitlab!1574))
- [Only allow invite to be accepted by user with matching email](gitlab-org/security/gitlab@a79d0e6dbbc32247c10c4928a04f0149071eb5fe) ([merge request](gitlab-org/security/gitlab!1633))
- [Add html escaping for default branch name](gitlab-org/security/gitlab@d26f0c4d5ef386100d40e92f815b7e754fccacc3) ([merge request](gitlab-org/security/gitlab!1631))
- [Configure OmniAuth to use GitLab AppLogger](gitlab-org/security/gitlab@dfcff90cb86fac0dff05d8bd5f25f46da2cc8ce0) ([merge request](gitlab-org/security/gitlab!1616))
- [Add permissions check to pipelines#show action](gitlab-org/security/gitlab@c611a8154dc5776a0767b4153ff8963d46e7f39a) ([merge request](gitlab-org/security/gitlab!1613))
- [Prevent impersonation in gitlab-shell SSH certs](gitlab-org/security/gitlab@320457b16cbfd5dec4e05937c4d61b96aba4c290) ([merge request](gitlab-org/security/gitlab!1610))
- [Fix Protected Environment Accesses Cleanup](gitlab-org/security/gitlab@99846cdeda6acf6223fb0ee5364e375765d3cbb1) ([merge request](gitlab-org/security/gitlab!1607)) **GitLab Enterprise Edition**
- [Do not show email address in error message](gitlab-org/security/gitlab@5c4adf419e38f0fd9d540d2f7cd9d14888bc6b96) ([merge request](gitlab-org/security/gitlab!1597)) **GitLab Enterprise Edition**
- [Disallow non-members to set issue metadata on issue create](gitlab-org/security/gitlab@0bb4499e5f4514beb647d0e6ac3f9b15720c42ce) ([merge request](gitlab-org/security/gitlab!1581))
- [Prevent guests from linking issues with errors](gitlab-org/security/gitlab@94462a56e9490ddd85ec7d1d869b6fda2042fb99) ([merge request](gitlab-org/security/gitlab!1588))
- [Block impersonation token use if it is not permitted](gitlab-org/security/gitlab@31b8bc506dd89a576a2cda094c711c22be764398) ([merge request](gitlab-org/security/gitlab!1584))
- [Updates oauth to 0.5.6](gitlab-org/security/gitlab@c839b6107c41bcd02e048d0ae0499c140bfbec1c) ([merge request](gitlab-org/security/gitlab!1568))
- [Remove impersonation token from api response for non-admin user](gitlab-org/security/gitlab@845dc284cc8ee8736e4f65740d61ffeb197f7b7c) ([merge request](gitlab-org/security/gitlab!1566))
- [Filter todos whose target users no longer have access to](gitlab-org/security/gitlab@a6c81e5cadb277f80d1b9565700f8b1f201cfb05) ([merge request](gitlab-org/security/gitlab!1554))
- [Fix tag ref detection for pipelines](gitlab-org/security/gitlab@cd5f61dc50c44d69896b38f3bd44129a8f1f01d8) ([merge request](gitlab-org/security/gitlab!1548))
- [Restrict access to instance-level security features for reporters](gitlab-org/security/gitlab@c8a75e8032c68065524a85f7030960b614a915bd) ([merge request](gitlab-org/security/gitlab!1539)) **GitLab Enterprise Edition**
- [Fix XSS in Mermaid Markdown rendering](gitlab-org/security/gitlab@86139e79c13cf87183cdec9f84ec114cdfc6d215) ([merge request](gitlab-org/security/gitlab!1489))
## 14.0.6 (2021-07-20)
### Fixed (4 changes)
- [Fix validation method regarding MIME type keys](gitlab-org/gitlab@2cc6d89cc77368b9472c8ec22e97bb3481409fb3) ([merge request](gitlab-org/gitlab!66403))
- [Geo: Fix snippet verification by replicating the HEAD ref](gitlab-org/gitlab@4dbf36af8553775603c170784ad8bfcdc436a669) ([merge request](gitlab-org/gitlab!66403)) **GitLab Enterprise Edition**
- [Fix LFS objects not downloading with Bitbucket](gitlab-org/gitlab@161776f9a4975dfeb2760b06e83160def902c61f) ([merge request](gitlab-org/gitlab!66403))
- [Replace Excon with Faraday for requesting object storage](gitlab-org/gitlab@a223d526d5b97f248c8810ef0b968d2c3b0323e0) ([merge request](gitlab-org/gitlab!66403))
## 14.0.5 (2021-07-08)
### Fixed (4 changes)
- [Return empty strings for Jira links when URL is not set](gitlab-org/gitlab@6da7890d8137b1879297ad81c6737312d6f672b3) ([merge request](gitlab-org/gitlab!65728))
- [Add prefix to autocomplete path](gitlab-org/gitlab@5256ab7db346610a816ebb975ae9a6ce0d853435) ([merge request](gitlab-org/gitlab!65728))
- [Do not create audit event for failed logins on read-only DB](gitlab-org/gitlab@30c7944ddddfe92566b3f66a7f549bef3ffd8d82) ([merge request](gitlab-org/gitlab!65728)) **GitLab Enterprise Edition**
- [Fix git clone for projects with a trailing dot over HTTP](gitlab-org/gitlab@a91be9412a09b069390cc33c14d1bc72216cdbf0) ([merge request](gitlab-org/gitlab!65728))
### Other (1 change)
- [Initialize conversion of ci_builds_metadata.id for bigint migration](gitlab-org/gitlab@34522b102be43118063aa3245d23af313173700d) ([merge request](gitlab-org/gitlab!65728))
## 14.0.4 (2021-07-07)
### Security (1 change)
- [Disable file and network premailer strategies](gitlab-org/security/gitlab@4af58e3d8ee1b25048f34208db6e685cf0bf1411) ([merge request](gitlab-org/security/gitlab!1544))
## 14.0.3 (2021-07-06)
### Fixed (7 changes)
- [Fix deploy keys not working with LFS auth check](gitlab-org/gitlab@134b244c7f59f8a20cb191bc0d2aaa43171f3d6e) ([merge request](gitlab-org/gitlab!65498))
- [DevOps Adoption - ensure displayNamespaceId is included](gitlab-org/gitlab@1166130f1e6786a8c96735b6518241fb704047b1) ([merge request](gitlab-org/gitlab!65498)) **GitLab Enterprise Edition**
- [Geo - Fix state value in the lfs_object_registry table](gitlab-org/gitlab@b6f30299d255949b79d149ee71ee50025ac0c8c2) ([merge request](gitlab-org/gitlab!65498)) **GitLab Enterprise Edition**
- [Fix broken Time Tracking Reports on Issuable sidebar](gitlab-org/gitlab@da0b4a92f791a3f621ec8da8e2fbb0ad4e39d399) ([merge request](gitlab-org/gitlab!65498))
- [Fix bug where Milestone page led to console error](gitlab-org/gitlab@179948d489ed92f5d8158c23190430e819941a29) ([merge request](gitlab-org/gitlab!65498))
- [Fix frequent items timestamps not updated](gitlab-org/gitlab@481d4d36252dc91291afe9dacd7d48558878d27f) ([merge request](gitlab-org/gitlab!65498))
- [Fix pages deployment storage migration](gitlab-org/gitlab@0eab6e579890c557bf97dd48dd6a2a7adaf97358) ([merge request](gitlab-org/gitlab!65498))
### Changed (2 changes)
- [Geo - Move migration to a pre-deployment migration](gitlab-org/gitlab@84327652855cafe36c574df798322b63d0649561) ([merge request](gitlab-org/gitlab!65498)) **GitLab Enterprise Edition**
- [Reintroduce recursive_approach_for_all_projects default-enabled](gitlab-org/gitlab@14b3aa69cad85541ae6b845b346c80d1eaea099b) ([merge request](gitlab-org/gitlab!65498))
## 14.0.2 (2021-07-01)
### Added (1 change) ### Added (1 change)
- [Added omniauth_user check when verifying user cap](gitlab-org/security/gitlab@a61062501630c35820301e9f79a036219d1e3074) ([merge request](gitlab-org/security/gitlab!1502)) **GitLab Enterprise Edition** - [Added omniauth_user check when verifying user cap](gitlab-org/security/gitlab@68c5d856fbf83f5f5ade562ea84b6aa06db96c60) ([merge request](gitlab-org/security/gitlab!1501)) **GitLab Enterprise Edition**
### Security (14 changes) ### Security (14 changes)
- [Bump rails gem version to 6.0.3.7](gitlab-org/security/gitlab@58d27ba819867baadf535e0d8d91d0cb818dc8b6) ([merge request](gitlab-org/security/gitlab!1515)) - [Update rdoc to 6.3.1](gitlab-org/security/gitlab@341334cbb2d822f6aa057933934b819c34b87932) ([merge request](gitlab-org/security/gitlab!1533))
- [Update rdoc to 6.3.1](gitlab-org/security/gitlab@ead11a6974576b0b1a974985493c75143e3bd575) ([merge request](gitlab-org/security/gitlab!1534)) - [Forbid GET requests with mutations](gitlab-org/security/gitlab@895c99b35efa6795fb050bfb4ef4574f3e32a373) ([merge request](gitlab-org/security/gitlab!1528))
- [Add sanitizing for name field](gitlab-org/security/gitlab@2c5672eae4323c2682245485b327850e68e7e5b4) ([merge request](gitlab-org/security/gitlab!1490)) - [Prevent GraphQL API access by deactivated users](gitlab-org/security/gitlab@2dda4163dadc04b59ee3367990b72bee933adf9b) ([merge request](gitlab-org/security/gitlab!1525))
- [Forbid GET requests with mutations](gitlab-org/security/gitlab@2b01d6dc310451fa3022f1865470ca004bbd4c33) ([merge request](gitlab-org/security/gitlab!1529)) - [Add sanitizing for name field](gitlab-org/security/gitlab@ecb5a598b87d670906df67ed4432426a375efa05) ([merge request](gitlab-org/security/gitlab!1499))
- [Copy feature visibility settings to a fork](gitlab-org/security/gitlab@5ee923ba64fb34fc38f831fc206a153d8f7eae91) ([merge request](gitlab-org/security/gitlab!1523)) - [Copy feature visibility settings to a fork](gitlab-org/security/gitlab@fcc87978b1c865c8bdcb3fc5d8dc221b7370192c) ([merge request](gitlab-org/security/gitlab!1522))
- [Avoid disclosing project in web IDE](gitlab-org/security/gitlab@759d1361e7f359d681c4f55ea2b6f7e1d0bb1e53) ([merge request](gitlab-org/security/gitlab!1512)) - [Fix XSS on audit log for feature flag actions](gitlab-org/security/gitlab@94fc41d49e828a6457f1de31f2b239b087679c12) ([merge request](gitlab-org/security/gitlab!1521))
- [Add new username validation](gitlab-org/security/gitlab@e79625541d04b0d6c94614f2afc6aaeb2ef40083) ([merge request](gitlab-org/security/gitlab!1495)) - [Avoid disclosing project in web IDE](gitlab-org/security/gitlab@9de99878401713bc5f3a76ca85901dc3a9ca0cd8) ([merge request](gitlab-org/security/gitlab!1511))
- [Allow only same-origin URLs for Edit Release Cancel button](gitlab-org/security/gitlab@e5bda0a7e03978afee494616e2054b8650b61d3e) ([merge request](gitlab-org/security/gitlab!1486)) - [Sanitize input on pasteGFM](gitlab-org/security/gitlab@7bb97cfa11a11bb0725bc707dec73831e16fe177) ([merge request](gitlab-org/security/gitlab!1514))
- [Update Nokogiri to 1.11.4](gitlab-org/security/gitlab@d71973da1850df059b1ec1422d50bbccace21ff2) ([merge request](gitlab-org/security/gitlab!1479)) - [Fix merge request diff display issue with unsupported encoding](gitlab-org/security/gitlab@8c21afdce6c6214c14db1863df1aad80ed501377) ([merge request](gitlab-org/security/gitlab!1509))
- [Fix deploy key fallback issue in protected branch](gitlab-org/security/gitlab@0411bc45885e1122c06dbff084b48bf03d78c6a8) ([merge request](gitlab-org/security/gitlab!1478)) - [Fix deploy key fallback issue in protected branch](gitlab-org/security/gitlab@a24aa5412a8f1dad01359de6b2f0b66bb741f5d4) ([merge request](gitlab-org/security/gitlab!1508))
- [Fix XSS on audit log for feature flag actions](gitlab-org/security/gitlab@22e2f903c821e54ce6d4b4b749a009d14abc4a13) ([merge request](gitlab-org/security/gitlab!1474)) - [Add total http read timeout](gitlab-org/security/gitlab@cf4e0aa0a3f668fb63de6721d062c3157fdd9f84) ([merge request](gitlab-org/security/gitlab!1507))
- [Sanitize input on pasteGFM](gitlab-org/security/gitlab@7dc511ebc2e77c3d22cd34ca87449f32120a5229) ([merge request](gitlab-org/security/gitlab!1453)) - [Allow only same-origin URLs for Edit Release Cancel button](gitlab-org/security/gitlab@4b78e1e31f0a23b964953b1766d156e12a75115f) ([merge request](gitlab-org/security/gitlab!1506))
- [Add total http read timeout](gitlab-org/security/gitlab@37c24c82d5dfa57fad03f265e7ba92f6ef250c30) ([merge request](gitlab-org/security/gitlab!1427)) - [Update Nokogiri to 1.11.4](gitlab-org/security/gitlab@c43001973ca1b684b4719f5559819179be2394da) ([merge request](gitlab-org/security/gitlab!1500))
- [Fix merge request diff display issue with unsupported encoding](gitlab-org/security/gitlab@7d05892daa6aaf951b941628e2af41e17977b140) ([merge request](gitlab-org/security/gitlab!1424)) - [Add new username validation](gitlab-org/security/gitlab@c904a128f2c2262288d00f673294423316318f4d) ([merge request](gitlab-org/security/gitlab!1498))
## 13.12.5 (2021-06-21) ## 14.0.1 (2021-06-24)
### Fixed (3 changes) ### Fixed (3 changes)
- [Fix failing spec](gitlab-org/gitlab@7d1a9b0155195eb082f5b33ba1310deed742a7a4) ([merge request](gitlab-org/gitlab!64488)) - [Remove add button from Devops Adoption](gitlab-org/gitlab@1c60bdf5daf64f10f001eeb5134f08a53a148d90) ([merge request](gitlab-org/gitlab!64764)) **GitLab Enterprise Edition**
- [Advanced Search Settings page does not load if the ES url is unreachable](gitlab-org/gitlab@80b262f0e79f02a89724ed4e3988e686f53c959c) ([merge request](gitlab-org/gitlab!64488)) **GitLab Enterprise Edition** - [DevOps Adoption - ensure displayNamespaceId is included](gitlab-org/gitlab@9eb7cd5212cfc19f4cd6578c8e4afc7b4da27eab) ([merge request](gitlab-org/gitlab!64764)) **GitLab Enterprise Edition**
- [Fix Password expired error on git fetch via SSH for LDAP user](gitlab-org/gitlab@19a7d7a6d3cd43f1c7559c729532ad3b9dafb75c) ([merge request](gitlab-org/gitlab!64488)) - [Add Helm-2to3.gitlab-ci.yml to Auto DevOps](gitlab-org/gitlab@61ac7f46b06fcf151be62407dc0837a44843800e) ([merge request](gitlab-org/gitlab!64764))
## 14.0.0 (2021-06-21)
### Added (116 changes)
- [Add Packages::Helm::ProcessFileService](gitlab-org/gitlab@dae2f102ec92a656eb56a753fa7dc625e3489ae3) ([merge request](gitlab-org/gitlab!62760))
- [Add unique index for Helm packages](gitlab-org/gitlab@cb08762e7c878e3dd0a1ca9f922f387f8b8e453a) ([merge request](gitlab-org/gitlab!62760))
- [Disable policies linked to no container repositories](gitlab-org/gitlab@120e0486368cff65da3782de377c82ec47a0b28e) ([merge request](gitlab-org/gitlab!62461))
- [Allow storing detection_method in vulnerability findings](gitlab-org/gitlab@e2a66be7a2b5d3f14c3698e0c74214b4164c0b9c) ([merge request](gitlab-org/gitlab!63989))
- [Expose `humanTimeEstimate` & `humanTotalTimeSpent`](gitlab-org/gitlab@4d078467643f9d3c48e43b18c706bb42746b9434) ([merge request](gitlab-org/gitlab!64081))
- [Make max diff files and max diff lines configurable](gitlab-org/gitlab@3e26e2528384efcd6e1b0b2e28c6aca687a23d6a) ([merge request](gitlab-org/gitlab!56722))
- [Add GraphQL endpoint to list agent configurations (via KAS)](gitlab-org/gitlab@d91cbf733ddbb6b9369efe1fecdb8b6fce6384ee) ([merge request](gitlab-org/gitlab!62646)) **GitLab Enterprise Edition**
- [Add checkbox in group settings for prevent sharing outside hierarchy](gitlab-org/gitlab@86eb11f2523f441f9a97f69c950816596208b0ab) ([merge request](gitlab-org/gitlab!63810))
- [Add "Enterprise" badge to users that are provisioned via SAML/SCIM](gitlab-org/gitlab@5f961f652a202d7dcbe872d827a48eb0e2bfd17b) ([merge request](gitlab-org/gitlab!63474)) **GitLab Enterprise Edition**
- [Update Bulk Import state more accurately](gitlab-org/gitlab@cea74ea42d4464c30ff39ca929b2bdadcb7083de) ([merge request](gitlab-org/gitlab!63883))
- [Enable DB Load-balancer flag USE_NEW_LOAD_BALANCER_QUERY by default](gitlab-org/gitlab@b44a37ba10472f7797867b988e41f7548c093e02) ([merge request](gitlab-org/gitlab!63910))
- [Allow toggle job_token_scope_enabled via GraphQL](gitlab-org/gitlab@3ca540c424d26e8f9cad16f846a7ca4366cd74b1) ([merge request](gitlab-org/gitlab!63778))
- [Publish package hash on Package Page](gitlab-org/gitlab@df0417560c5eb9438a1dcba46b94adcc191a8ae2) ([merge request](gitlab-org/gitlab!63279))
- [Add backend support for Coverage-Check rule](gitlab-org/gitlab@d8d6a39c1dc6fa51d5c29aea777f2d7bc820c9d8) ([merge request](gitlab-org/gitlab!63079))
- [Add project setting to toggle job token scope](gitlab-org/gitlab@99aacbf5339605d7e7116285e245508f48370456) ([merge request](gitlab-org/gitlab!63446))
- [Scope JobToken to only authorized projects](gitlab-org/gitlab@a8016a6bb4a7f446d77b7738260425fa65c01e01) ([merge request](gitlab-org/gitlab!63446))
- [Scope JobToken to only authorized projects](gitlab-org/gitlab@22718b69b813d7af3d17eac79b66ade310678392) ([merge request](gitlab-org/gitlab!63446))
- [Mark pending todo as done when resolving design discussions](gitlab-org/gitlab@0a27c129bc1ccab09be9f5e71ed194b55394caaf) ([merge request](gitlab-org/gitlab!62951))
- [Migration for fixing missing traversal ids](gitlab-org/gitlab@cb53af00930569beb75ee50f713858fb99fb90bc) ([merge request](gitlab-org/gitlab!63847))
- [Add qrtly reconciliation alert](gitlab-org/gitlab@c263de9b122c2e00899674b65d3cc0f5e5bf8d10) ([merge request](gitlab-org/gitlab!63181)) **GitLab Enterprise Edition**
- [Enable by default FF sidebar_refactor](gitlab-org/gitlab@8fefd5b5a6e5f1bf4963038c433d7bdfbe570f33) ([merge request](gitlab-org/gitlab!61679))
- [Add time_change in Issue, MR and Note webhook](gitlab-org/gitlab@56bf4a7f980bdb6304d4e71717e3ff8274b9b6b5) ([merge request](gitlab-org/gitlab!55087))
- [Prepopulates the pipeline editor with a 3 stage template](gitlab-org/gitlab@d8a1ad6125ba7f6cb33c8f67cbf67e751f94c3e9) ([merge request](gitlab-org/gitlab!63498))
- [Add commit type to generic security reports](gitlab-org/gitlab@3a367350f0339a6faa44db5e3d86cc7e3e933c2d) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63723)) **GitLab Enterprise Edition**
- [Adjust indexes for iterations and iteration cadences](gitlab-org/gitlab@45702b59f5dace0b416ec7908dcf13e72e23fc57) ([merge request](gitlab-org/gitlab!62348))
- [Epic Boards](gitlab-org/gitlab@0531b906b69fa81b99672ff15975e7eb1dfd6cbe) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62644)) **GitLab Enterprise Edition**
- [Add order_project_path to package graphql API sort](gitlab-org/gitlab@76ed62782a0dd62f9dd66a31ce127afd3cd0c40f) ([merge request](gitlab-org/gitlab!62473))
- [Add provisioning group to pipeline validation payload](gitlab-org/gitlab@43d8c865b51da106fd75b2875b956a30259dba88) ([merge request](gitlab-org/gitlab!63606)) **GitLab Enterprise Edition**
- [Add index for description in ci_runners table](gitlab-org/gitlab@b9b33ee15c9d1a9f8ed166314dce862d84903f22) ([merge request](gitlab-org/gitlab!63036))
- [Show security report scan errors on pipeline view](gitlab-org/gitlab@61418b8ad3a66e062ae486839c40331e8c837302) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62971)) **GitLab Enterprise Edition**
- [Upgrade GitLab Pages to 1.40.0](gitlab-org/gitlab@6eaf97ebc6828d06bc9a0d90e96969ccb89a0793) ([merge request](gitlab-org/gitlab!63610))
- [Check hierarchy sharing settings in GroupLinks::CreateService](gitlab-org/gitlab@aa55411bd92550190098e9410233a67794618087) ([merge request](gitlab-org/gitlab!63107))
- [Allow user to create epics via epic board list](gitlab-org/gitlab@df231ee29d04e0bfce6b40ba5c45a9d2ab010816) ([merge request](gitlab-org/gitlab!62455)) **GitLab Enterprise Edition**
- [Create table for tracking ci minute purchases](gitlab-org/gitlab@d9d7332981ed423b40f25016254ef6e71d263054) ([merge request](gitlab-org/gitlab!62393)) **GitLab Enterprise Edition**
- [Add epic's note system_note_meta to import/export](gitlab-org/gitlab@ca32a0f9d848b4d8a8086dd2aab15525b92cdbcf) ([merge request](gitlab-org/gitlab!63551)) **GitLab Enterprise Edition**
- [Add Group Avatar endpoint](gitlab-org/gitlab@b8f7c83542d4ec5a994228098c426d002d2813c3) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62596))
- [Add Content Editor support for wikis](gitlab-org/gitlab@2dddbe794cf79b28c98cd11002860a16563958f7) ([merge request](gitlab-org/gitlab!62919))
- [Enable CORS headers for OpenID Connect discovery endpoints](gitlab-org/gitlab@fdfb3420cca8d54baaa8181b126433fbaf41bb8b) ([merge request](gitlab-org/gitlab!63276))
- [Add a GET endpoint to user preferences](gitlab-org/gitlab@d0a597155ae4f526626ad494777202b1ccc8b2ad) ([merge request](gitlab-org/gitlab!63462))
- [Escaped markdown not interpreted as shortcuts](gitlab-org/gitlab@f8e1fb75d5eac0876ffdd249f26943799fdd0be7) ([merge request](gitlab-org/gitlab!63452))
- [Allow to make test cases confidential](gitlab-org/gitlab@fa6b3af2e457b2ea056ccfd89fc0a2bc8c4d697e) ([merge request](gitlab-org/gitlab!63098)) **GitLab Enterprise Edition**
- [Add is_shared and runner_type to hooks and API responses](gitlab-org/gitlab@342cd36c4bc4b94caf45eb8516bba985f967dbb6) ([merge request](gitlab-org/gitlab!62942))
- [Enable reporting of usage data for Jira integration](gitlab-org/gitlab@45ce55af6f7f9de0de064dfcbf42e51589d8bf7b) ([merge request](gitlab-org/gitlab!63184))
- [Create metric events for service desk emails](gitlab-org/gitlab@1ec39fb2ff13f1828821b6e1844a3b779337cbc7) ([merge request](gitlab-org/gitlab!63037))
- [Add option to disable printing of root password during DB seeding](gitlab-org/gitlab@9e06ec3a768a08320eea3818b056d3416072c7b1) ([merge request](gitlab-org/gitlab!63271))
- [Allow users to specify their pronouns](gitlab-org/gitlab@5c6be0aaabeb0b4d34ec5d149d0a6ffb8b4e8971) ([merge request](gitlab-org/gitlab!63221))
- [Gracefully handle query timeouts for project VSA](gitlab-org/gitlab@c334e13a81c1f53986429c6f5a14508401baae60) ([merge request](gitlab-org/gitlab!63301))
- [Add title and tooltip to diff preferences dropdown](gitlab-org/gitlab@b6762723f91eb15bd45dc0550b0ac79f622ae47b) ([merge request](gitlab-org/gitlab!61840))
- [Add group-level lead time charts](gitlab-org/gitlab@84a5e859181c7b7d7475bd26e8cc7969455ee486) ([merge request](gitlab-org/gitlab!62941)) **GitLab Enterprise Edition**
- [Change pipeline url to have underline](gitlab-org/gitlab@ee4ad9fa9738e45d6a74cdc2abba73f9869ce548) ([merge request](gitlab-org/gitlab!63325))
- [Add danger for merge trains](gitlab-org/gitlab@a7337266dd61ced6f27d1763d4e890c359401288) ([merge request](gitlab-org/gitlab!63094))
- [Optionally include trailers in the commits API](gitlab-org/gitlab@b8fefa073aeedcf2c34a0d4d1b36c5df88fe4a20) ([merge request](gitlab-org/gitlab!63228))
- [Add compliance tab to redesigned Security-Configuration Page](gitlab-org/gitlab@632524a7b5a441b54577568713578539e8769dd6) ([merge request](gitlab-org/gitlab!63078))
- [Instrumenting project sidebar menus](gitlab-org/gitlab@6e4caf1fffb5b73884362cc74757f5c60cac6035) ([merge request](gitlab-org/gitlab!62030))
- [Add upcoming_reconciliations table and model](gitlab-org/gitlab@b28478bdf19bd78c4a452b8da63849a390387789) ([merge request](gitlab-org/gitlab!63054))
- [Support graceful shutdown of Workhorse connections](gitlab-org/gitlab@73f323b077834b80574b807853e3f5b0fd11b780) ([merge request](gitlab-org/gitlab!62701))
- [Add Clone with VS Code for SSH](gitlab-org/gitlab@d0ee6aa31e987003b54d71356fd70371055573d3) ([merge request](gitlab-org/gitlab!59396))
- [Get ancestors of an Epic using GraphQL](gitlab-org/gitlab@63aa2fb0628c110bdba6d4234d4eb63f3954ab02) ([merge request](gitlab-org/gitlab!61154)) **GitLab Enterprise Edition**
- [Add wiki page diff url to Slack notification message](gitlab-org/gitlab@452b791834cbc7530ce3854c2503a6234ed880f0) ([merge request](gitlab-org/gitlab!63082))
- [Allow administrators to enable automatic deactivation of dormant users](gitlab-org/gitlab@029bc739503ba10b90d438851526c8eccac505ef) ([merge request](gitlab-org/gitlab!62969))
- [Add pipeline source to custom CI_JOB_JWT claims](gitlab-org/gitlab@572ad1851d9ae2f47e7da560e7f071d5f184c6b2) ([merge request](gitlab-org/gitlab!62754))
- [Display credit card status in /admin/users/:id page](gitlab-org/gitlab@7914eeffb19b8eeb991be0b21e86672aeae7c3c1) ([merge request](gitlab-org/gitlab!62803)) **GitLab Enterprise Edition**
- [Allow users to delete items from the package file list](gitlab-org/gitlab@750cca34851a633eeea0d0012371264affe68c32) ([merge request](gitlab-org/gitlab!62179))
- [Show generic 'code' type on vuln details](gitlab-org/gitlab@b9af9a5e1734cfce757ea884681f3c1de5f785b2) ([merge request](gitlab-org/gitlab!62861)) **GitLab Enterprise Edition**
- [Add ability to search instanceSecurityDashboard.projects GraphQL query](gitlab-org/gitlab@e6d18ad71821410f33edb6196f9cf9636f375934) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62933)) **GitLab Enterprise Edition**
- [Add `latest_pipeline_id` column to `vulnerability_statistics` table](gitlab-org/gitlab@d99873557afd16716de7249b5e0511ae3a43d420) ([merge request](gitlab-org/gitlab!62610))
- [Import group boards & board lists via ndjson when using Bulk Import](gitlab-org/gitlab@1d5dab27000c359bf148bdaf6011fa19e755bf3e) ([merge request](gitlab-org/gitlab!62668)) **GitLab Enterprise Edition**
- [Add an option to expose description_html in Release API](gitlab-org/gitlab@687a7cc9bf3360151dc055dd84e87ec4ce000b3f) ([merge request](gitlab-org/gitlab!62802))
- [Render table types on generic vulnerability report](gitlab-org/gitlab@3f4feebaab10d79d5567b733bb0fd8bc7b844d7c) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62546)) **GitLab Enterprise Edition**
- [Remove Web Application Firewall related frontend files](gitlab-org/gitlab@2e2382d16b3595c9a9adb5a7fe0c176ee198f702) ([merge request](gitlab-org/gitlab!61489)) **GitLab Enterprise Edition**
- [Add link to navigate to profile settings page](gitlab-org/gitlab@0fdb5b9536764e6573da243ed84516f3ab9e2b3d) ([merge request](gitlab-org/gitlab!62791))
- [Persist the `page` parameter for VSA pagination](gitlab-org/gitlab@3df8ae120ad7ba7edff4e9a075a804ab3d24cba0) ([merge request](gitlab-org/gitlab!62439)) **GitLab Enterprise Edition**
- [Adds block_changes_at to LicenseType in GraphQL](gitlab-org/gitlab@344eec81dc069f821756f8f2fc8b4f0c935574d0) ([merge request](gitlab-org/gitlab!62510)) **GitLab Enterprise Edition**
- [Add .drafts scope to MergeRequests](gitlab-org/gitlab@93c77e146328d539476f7aaca365629df1c8f342) ([merge request](gitlab-org/gitlab!62718))
- [Add delete branch modals behind feature flag](gitlab-org/gitlab@e006d7b35cfcdb6c4c95ab6dc5b8dd54a0a8dbed) ([merge request](gitlab-org/gitlab!56782))
- [Add the documentation for sidekiq routing rules](gitlab-org/gitlab@4a476ebb0735bb761b0f46d9c0d6a17ce2b3c33f) ([merge request](gitlab-org/gitlab!60479))
- [Helm chart download API endpoint](gitlab-org/gitlab@13ff8bde2fdf7b8cd81cc7024000733c88728033) ([merge request](gitlab-org/gitlab!61014))
- [Add custom header text to free personal namespaces billing page](gitlab-org/gitlab@f711ee6ab906d14604dbc1dd7fd3fb301bd08a1a) ([merge request](gitlab-org/gitlab!62365))
- [Add delete escalation policy GraphQL mutation](gitlab-org/gitlab@64f1ae7cb0cf8a9a5c8f930c95beb7a504c00ee9) ([merge request](gitlab-org/gitlab!62009))
- [Add file-location component for generic security reports](gitlab-org/gitlab@893aa26510e5a96df7535757a8d3214c1d0a036d) ([merge request](gitlab-org/gitlab!62653)) **GitLab Enterprise Edition**
- [Store CI runner config data](gitlab-org/gitlab@dca1424b5efdf5900e9b3a3e17a3572509af5aba) ([merge request](gitlab-org/gitlab!57953))
- [Expose the state field for vulnerability findings](gitlab-org/gitlab@29e8f53a59d511e65604490742b73992219e375a) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62147)) **GitLab Enterprise Edition**
- [Add graphql API to list Scan Execution Policies](gitlab-org/gitlab@6db5e69a42438e766e510b59e1288fc67c87b8c2) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62403)) **GitLab Enterprise Edition**
- [Support custom messages in the cherry-pick API](gitlab-org/gitlab@5a7d3be2be0aac8b3c66864775e0b0e8fbd960d0) ([merge request](gitlab-org/gitlab!62481))
- [Add post migration to cleanup orphaned records](gitlab-org/gitlab@0d346291f613e7e3191e844d4bbd4a1f06a71a09) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61787))
- [GraphQl: Allow filtering epics by negated parameters](gitlab-org/gitlab@b44e246b909cb929f87a93b937d28fbe93fd3261) ([merge request](gitlab-org/gitlab!61823))
- [Add finding evidence header](gitlab-org/gitlab@d79129b4f1a4dd2d27e94bf2975b880df426966e) ([merge request](gitlab-org/gitlab!61402))
- [Add module-name component for generic security reports](gitlab-org/gitlab@6144a4a1a6eb3e2e459d00e925544a4112821153) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62447)) **GitLab Enterprise Edition**
- [Use assignee sidebar widget in the alert drawer](gitlab-org/gitlab@7c29ff14ffcad46869c97086edb3cac9c6ce48cf) ([merge request](gitlab-org/gitlab!61839)) **GitLab Enterprise Edition**
- [Add 'show_whitespace_in_diffs' to the UserPreferences endpoint](gitlab-org/gitlab@896b2d6efee062f89b7daebcf4ee551fc7e153e4) ([merge request](gitlab-org/gitlab!62245))
- [Update button variants alignment and spacing](gitlab-org/gitlab@b7a9bbd3f0752a33b264e50dd85706d39faacb10) ([merge request](gitlab-org/gitlab!61791))
- [Allow recording of experiment subjects](gitlab-org/gitlab@2d6bff529163940b8e7f6ef342cb51b9c4cae1a3) ([merge request](gitlab-org/gitlab!61914))
- [Set the git default branch to "main"](gitlab-org/gitlab@a8bfdf5729ec45c3bbcb0f2dff7a901f0ed54884) ([merge request](gitlab-org/gitlab!62467))
- [Add memory view to Performance Bar](gitlab-org/gitlab@865cd871e58d58e2dc372c45c5e7722435fb88a3) ([merge request](gitlab-org/gitlab!61332))
- [Add user IP data to external pipeline validation service](gitlab-org/gitlab@410b7bceb82136eddf3709a612c9bea946d93afd) ([merge request](gitlab-org/gitlab!62438))
- [Backfill primary key migration for self-managed instances](gitlab-org/gitlab@3da2450dc1d9ca7ab0157792ea395e9d248b382c) ([merge request](gitlab-org/gitlab!61321))
- [Makes the invite button on empty projects permanent](gitlab-org/gitlab@20ded4ce65e8e3928fe577a97a540fc294f58f68) ([merge request](gitlab-org/gitlab!62417))
- [Restrict trial during free signup to company users](gitlab-org/gitlab@26aa54acfa50e08ea96d667940a9d2d6e7b78c5c) ([merge request](gitlab-org/gitlab!62382))
- [Add credit card validation checkbox to admin users panel](gitlab-org/gitlab@508e926c0bb2ee2ad2c43b7f7e434c9faf344b69) ([merge request](gitlab-org/gitlab!62160))
- [Delay worker execution for workers utilizing LB](gitlab-org/gitlab@1c82d36c06cdfc04a8259faf587423a693a24991) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62374))
- [Optionally start a trial during free signup](gitlab-org/gitlab@c6ed9500c8d0ae9a51b0a0278cd7454c18ed75b6) ([merge request](gitlab-org/gitlab!62174))
- [Adds content to createCommit mutation](gitlab-org/gitlab@bd5eaf0b2eda7890aa0db47f3f63031c8589693f) ([merge request](gitlab-org/gitlab!60938))
- [Add dast_runner_site_validation feature flag](gitlab-org/gitlab@c5a9d59cd97cb99f12ed34189a60dfd22fedcc66) ([merge request](gitlab-org/gitlab!62299))
- [Add GraphQL types for escalation policies and rules](gitlab-org/gitlab@2879b4a12d34491ad2100667392e0bcea183c8aa) ([merge request](gitlab-org/gitlab!62299))
- [Debian Group and Project Distribution Keys schema](gitlab-org/gitlab@38ca1e1860bc7181d7c19c8de0bd54a4fdfd853f) ([merge request](gitlab-org/gitlab!62012))
- [Compress oversized Sidekiq job payload before dispatching into Redis](gitlab-org/gitlab@ce40f0010967d17b40c17b7b1d7c8a7040374187) ([merge request](gitlab-org/gitlab!62012))
- [Add metrics to calculate rate of project imports](gitlab-org/gitlab@8b694f1b82a226c06a546123996601de02014274) ([merge request](gitlab-org/gitlab!62012))
- [Enable Kroki on reStructuredText and Textile documents](gitlab-org/gitlab@9d799fd9d5b702f7ad190a4063935aeef2ee5597) ([merge request](gitlab-org/gitlab!62012))
- [Add admin page for batched background migrations](gitlab-org/gitlab@575187d9fdbdc1bd6a374a1abec6b6e1e3a6b24a) ([merge request](gitlab-org/gitlab!62012))
- [Remove threat_monitoring_alerts feature flag](gitlab-org/gitlab@2efff7692093008ebd8fb0495aad303ddbc16e53) ([merge request](gitlab-org/gitlab!62148))
- [Add GraphQL types for escalation policies and rules](gitlab-org/gitlab@078890677fbd80545445e9b424e42463a0ca0df7) ([merge request](gitlab-org/gitlab!61439))
- [Update button variants and avatar layout](gitlab-org/gitlab@4bf39340d0afc449d6c112f0c114cb2fc9828d79) ([merge request](gitlab-org/gitlab!61504))
- [Add admin page for batched background migrations](gitlab-org/gitlab@0203c5dd44f5f97318d08f75c69c604055ee1bf5) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60911))
- [Add Sidekiq payload compression log fields](gitlab-org/gitlab@4ab91e3ecfbe3063f42eb307b956c159fd555801) ([merge request](gitlab-org/gitlab!61667))
- [Add Sidekiq payload decomression server middleware](gitlab-org/gitlab@4a9999355056dad75cf79c544239d9c2ec0ac156) ([merge request](gitlab-org/gitlab!61667))
- [Implement Sidekiq job payload compressor](gitlab-org/gitlab@32b110e80331890a694e36642f0f2cbb1befd62d) ([merge request](gitlab-org/gitlab!61667))
### Fixed (161 changes)
- [Only update required instance CI template when the parameter is present](gitlab-org/gitlab@c68b31bf53fa46c6582328ec624b1c4192435c68) ([merge request](gitlab-org/gitlab!63344))
- [Bugfix: avoid 500 when resending confirmation](gitlab-org/gitlab@c793f4db1a65003b3b8e8d5e93b896af94ef7e38) ([merge request](gitlab-org/gitlab!64234))
- [Deal with invalid caches](gitlab-org/gitlab@56203843d2a5f489bda9cf01537c4b8f55bfffac) ([merge request](gitlab-org/gitlab!63395))
- [Fix CI/CD > Pipelines active routes](gitlab-org/gitlab@86573c3fb3122535e8597ed85169a1d96d44fb44) ([merge request](gitlab-org/gitlab!64119))
- [Fix unreachable ES url exception](gitlab-org/gitlab@a778d4f76de5e554e8c6a84aed0eb57ff31aec13) ([merge request](gitlab-org/gitlab!63764)) **GitLab Enterprise Edition**
- [Fix problems with ldap users with expired password](gitlab-org/gitlab@e521e9736b3d2d444d239636f5af780d4df98bcc) ([merge request](gitlab-org/gitlab!63466))
- [Fix DA dropdown alignment](gitlab-org/gitlab@0abf60e391fc90fb4ce0bdc92338db2e0e2d2903) ([merge request](gitlab-org/gitlab!64174)) **GitLab Enterprise Edition**
- [Normalize buttons whitespace to only rely on margins](gitlab-org/gitlab@520f936fba16f15ed53824b6fd6a773d6444feee) ([merge request](gitlab-org/gitlab!64078))
- [JS error on continuous onboarding welcome page](gitlab-org/gitlab@4480ea1f2981cbf8db4b74c05e23a5c43592f752) ([merge request](gitlab-org/gitlab!63830)) **GitLab Enterprise Edition**
- [Only show coverage fuzzing artifact download when the job exists](gitlab-org/gitlab@7d462536bb0c43733a705ea35ecb65818d0a6326) ([merge request](gitlab-org/gitlab!63957))
- [Align file line numbers for some Safari users](gitlab-org/gitlab@1801b1f7fc8bd90a4c17e92bf184dfd2fe1ce2bd) ([merge request](gitlab-org/gitlab!63132))
- [Use context-aware translation for cloud license](gitlab-org/gitlab@a99df9bfb96e9d553763113a13209fd8d6376ce8) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64162)) **GitLab Enterprise Edition**
- [Fix Embedded Snippet CSS to remove unnecessary vertical scroll bar](gitlab-org/gitlab@7e268f512aff5e8f44d344cdb4d44e2b95da7c4f) ([merge request](gitlab-org/gitlab!62945))
- [Rebuild iterations automation index](gitlab-org/gitlab@42c4987315f357284cfab40240ef5c7d86d7b489) ([merge request](gitlab-org/gitlab!63858))
- [Fix migration for SSH key expiration enforcement](gitlab-org/gitlab@5df1166f3e824c08c3a7d5d051e68215af95e1b6) ([merge request](gitlab-org/gitlab!64124))
- [Fix spacing between deploy buttons in MR widget](gitlab-org/gitlab@4bbd3fcf2da42dae3647300e5441cd96665d2d0b) ([merge request](gitlab-org/gitlab!64078))
- [Fix blank state styling for welcome screens](gitlab-org/gitlab@dfca5d63c5593cb522b170c3d5941427856e8213) ([merge request](gitlab-org/gitlab!64082))
- [Fix sidebar item on Jira issue details page](gitlab-org/gitlab@1d2bcbcd411102377d4de7b8fef98653925ffe34) ([merge request](gitlab-org/gitlab!63954)) **GitLab Enterprise Edition**
- [checks: Fix LFS pointer checks only verifying first reference](gitlab-org/gitlab@b37691bcaecbd090280dcded103a3c323498d5cc) ([merge request](gitlab-org/gitlab!61355))
- [Fix NameError Admin::ApplicationSettings::UpdateService](gitlab-org/gitlab@5b4e81e10e84b4d92d37f1b2151fe38b8465da0a) ([merge request](gitlab-org/gitlab!64055))
- [Fix CI editor template not updating on commit](gitlab-org/gitlab@56e33f473e99ff98dfd0d8921fd47c970d4c5231) ([merge request](gitlab-org/gitlab!64029))
- [Add select_rows to the list of NON_STICKY_READS](gitlab-org/gitlab@d095deff7524ed2e11dd05c6feaa7afaf49b5dc5) ([merge request](gitlab-org/gitlab!63893))
- [Allow nil on delegated CI/CD settings](gitlab-org/gitlab@9b71913e96f703b022f0927644c382e84012ca8c) ([merge request](gitlab-org/gitlab!63809))
- [Fetch from all parent groups in issue epic select](gitlab-org/gitlab@8a8d2017011e5bbef4d7e6a561dde63220477f5d) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63618)) **GitLab Enterprise Edition**
- [Prevent CI schema from registering if schema_linting flag is off](gitlab-org/gitlab@2d3db8025650746cd5f27ad942d49e7fb63e704d) ([merge request](gitlab-org/gitlab!63552))
- [Conditionally render create group buttons](gitlab-org/gitlab@ef09a654c4c23cb716de5348f1b93270c4c317a1) ([merge request](gitlab-org/gitlab!63871))
- [Do not trim wiki content by default](gitlab-org/gitlab@e8e492d034770037abb04581e95c0e3942f234b4) ([merge request](gitlab-org/gitlab!63930))
- [Show the bytes when git reports the file as undiffable](gitlab-org/gitlab@de19a30b8e339c8603b817ffdfb6a5f60a333173) ([merge request](gitlab-org/gitlab!62445))
- [Use unstranslated names for telemetry on membership](gitlab-org/gitlab@64a5c41156b1a153fd77984132c1b82d387fdb38) ([merge request](gitlab-org/gitlab!63906))
- [Hide search icon on larger breakpoints again](gitlab-org/gitlab@399519194933202c21f2d6a25456b5cee49bbca8) ([merge request](gitlab-org/gitlab!63861))
- [Use user config for first day of week in issue datepicker](gitlab-org/gitlab@285a4d6bfe29dfaebb8fbd6bd8cafc60ad6f2c1f) ([merge request](gitlab-org/gitlab!63821))
- [Fix accessing the errors property of the scan objects](gitlab-org/gitlab@38a4febd36bd3b89cdc5c65b6e40f69d4b2c55e1) ([merge request](gitlab-org/gitlab!63808)) **GitLab Enterprise Edition**
- [Gracefully handle unknown failure reason in runner CI job](gitlab-org/gitlab@4e52147696c760610939df5260e15aa4427c43f5) ([merge request](gitlab-org/gitlab!63828))
- [Check Security::Scan resources to identify ran security jobs](gitlab-org/gitlab@0b4b2ca47398429f08740dfbae173e1521275f98) ([merge request](gitlab-org/gitlab!63807)) **GitLab Enterprise Edition**
- [Fix bug where disabling usage ping via gitlab.rb did not work](gitlab-org/gitlab@c4c513b8a6f0e1b23485e7a05b9311de6f6742fe) ([merge request](gitlab-org/gitlab!63784))
- [Add default_branch support for Project API](gitlab-org/gitlab@24e3c5bfd58d56882e885daf09b075020024f8fd) ([merge request](gitlab-org/gitlab!63771))
- [Avoid idling in transaction while saving project export object](gitlab-org/gitlab@fa4e7efb5ed98a0648a0477649f37dd76bfdd561) ([merge request](gitlab-org/gitlab!63350))
- [Fix timeouts on expiring SSH keys](gitlab-org/gitlab@08e99e90260915fbccb58e45d1fa92aa1d02afb9) ([merge request](gitlab-org/gitlab!63623))
- [Only check for modified paths when the branch is updated](gitlab-org/gitlab@c3329e788a824152078857aa7558c167ec13edb5) ([merge request](gitlab.com/gitlab-org/gitlab/-/merge_requests/63523)) **GitLab Enterprise Edition**
- [Change meta tag theme color to match theme](gitlab-org/gitlab@493e5b79e0856892733e281d9118d09dcf9eadd5) ([merge request](gitlab-org/gitlab!63648))
- [fix: VulnerabilityFinding equality should exclude other record types](gitlab-org/gitlab@356e004a1cd12d9047fb1a43965e4e535e75b101) ([merge request](gitlab-org/gitlab!63554)) **GitLab Enterprise Edition**
- [Fix trendline error](gitlab-org/gitlab@8b5eadfa9f9450a98698ed0c7915ddf7025061ee) ([merge request](gitlab-org/gitlab!63312)) **GitLab Enterprise Edition**
- [Fix unintentional cleanup of Import/Export tmp files](gitlab-org/gitlab@45f991a1c0cb21148a0f5a9766e60412d3c8fa38) ([merge request](gitlab-org/gitlab!63065))
- [Use issueable reference prefix in basic search results](gitlab-org/gitlab@fba94120e74a6fd6e5cdb4d0750910abc1b94c1d) ([merge request](gitlab-org/gitlab!63164))
- [Calculate mergeability check sync on first widget load](gitlab-org/gitlab@46ffa7b826ddf560f7a827ea4c40ed8454c2c490) ([merge request](gitlab-org/gitlab!63506))
- [Fix fetch policy in pipeline editor branch switcher](gitlab-org/gitlab@e7ee68235b411e58cc496dff7993338ea63d7e56) ([merge request](gitlab-org/gitlab!62275))
- [Fix upload-file-experiment-trigger setting incorrect base route](gitlab-org/gitlab@f528dd41f688b0dd723a74d993532ddd7524fe60) ([merge request](gitlab-org/gitlab!63487))
- [Add guard - diff missing from merge_request_diffs](gitlab-org/gitlab@a3cac1386911794fd0e63a1b3afc253d5af9fb9e) ([merge request](gitlab-org/gitlab!63338))
- [Resolve Yajl encoding incompatibility](gitlab-org/gitlab@bc56a61fc4f0cdf5d700a47e6170b5304584d912) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63379))
- [Fix MR approval by reporters](gitlab-org/gitlab@ce0f10f69fa660c731a244451f60e87b48142e41) ([merge request](gitlab-org/gitlab!63153)) **GitLab Enterprise Edition**
- [Fix conflict resolve to handle FailedPrecondition error correctly](gitlab-org/gitlab@4214e8b561d79bcdb4788ff552fb486c1b06a132) ([merge request](gitlab-org/gitlab!61988))
- [Repurpose Key.expired_today_and_not_notified scope](gitlab-org/gitlab@02f2bf821791331fb8c47bbb7fc43c6a0fa9fb9d) ([merge request](gitlab-org/gitlab!62114))
- [Fix escaping characters in authors name for "Pending Comments" dropdown](gitlab-org/gitlab@2b4768797cb4a66fe2df33d60a5176d7d9330d7a) ([merge request](gitlab-org/gitlab!63349))
- [Fix links in code quality widget](gitlab-org/gitlab@102652819993e263567386b398d70edfaa73d40e) ([merge request](gitlab-org/gitlab!63346))
- [Fix spam detection with Akismet client](gitlab-org/gitlab@ba1815659837e00d04b4dcd0a6a4426a41e81138) ([merge request](gitlab-org/gitlab!63117))
- [Do not display bulk selection when user is auditor](gitlab-org/gitlab@bd27eb022dfd047fe0e4a5514242324dd611081e) ([merge request](gitlab-org/gitlab!62685)) **GitLab Enterprise Edition**
- [Add guard condition for when cilium](gitlab-org/gitlab@2e7fd9662f0e7396a770a40eceb5777af86be0c7) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63258)) **GitLab Enterprise Edition**
- [Enable HTML labels in Mermaid](gitlab-org/gitlab@80570c0a1a790ccc668c84aa076c8e520e4f43eb) ([merge request](gitlab-org/gitlab!63101))
- [Upgrade gitaly dependency to use proper go modules versioning](gitlab-org/gitlab@c75ac6642b3151b5730ba6d5641a866b3f76c346) ([merge request](gitlab-org/gitlab!63284))
- [Fix MR diff compare with previous version](gitlab-org/gitlab@116280a6448ae08d41e63e057a2f92e3bbaba2df) ([merge request](gitlab-org/gitlab!62535))
- [Use tag helper to generate custom emojis](gitlab-org/gitlab@4346a386773e2096165821a5885695935c621cf9) ([merge request](gitlab-org/gitlab!63275))
- [Allow GraphQL MemberInterface to support null users](gitlab-org/gitlab@86b0a8c9c75c29c4dccd20839df22eadb186c511) ([merge request](gitlab-org/gitlab!63262))
- [Fix blank error message for codequality diff](gitlab-org/gitlab@f6721845e2529a76985cdd9481c4afa1f20b0238) ([merge request](gitlab-org/gitlab!63230)) **GitLab Enterprise Edition**
- [Fix known issues with the CSP](gitlab-org/gitlab@f3e12343371fd29cae5e996416b1bdce57e648a2) ([merge request](gitlab-org/gitlab!63206))
- [Whitelist pages in mermaid rendering](gitlab-org/gitlab@e1a4b221e3d4d7d822e3ddb007865779ae1a6b1c) ([merge request](gitlab-org/gitlab!62451))
- [Fix pipeline graph visualization lines disappearing](gitlab-org/gitlab@4242057e0456e2b9b88165dc97e815fe3edc7dcc) ([merge request](gitlab-org/gitlab!63083))
- [Set CSP back to disabled by default](gitlab-org/gitlab@226b5c8dc96e1c9d91a2dd083e0b5d3ddc3eb184) ([merge request](gitlab-org/gitlab!62961))
- [Fix Advanced Search retry migration button](gitlab-org/gitlab@aace51ef8ca37552919261ca5d4832a75f62e41a) ([merge request](gitlab-org/gitlab!63012)) **GitLab Enterprise Edition**
- [Permit symbols when loading mail_room.yml](gitlab-org/gitlab@b2fb691e17e180e765e253f7fbedb122bf79c183) ([merge request](gitlab-org/gitlab!62780))
- [Use `#use_open_file` for NuGet metadata extraction](gitlab-org/gitlab@6c112a100a9129d8ec88d4604b94042de924f746) ([merge request](gitlab-org/gitlab!62471))
- [Fix iteration wildcard id filtering for boards](gitlab-org/gitlab@c094a3215315355ecfe18a6ab9fdafe63d87073a) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62801)) **GitLab Enterprise Edition**
- [Fix reference to `isSquashReadOnly`](gitlab-org/gitlab@e0ed769c5be91cfe0b2397bf24a8585ba1459edc) ([merge request](gitlab-org/gitlab!62851))
- [Prevent error when accessing optional needs in pipeline graph](gitlab-org/gitlab@f0b4301d636383b64f8850fbd996801fcab2b645) ([merge request](gitlab-org/gitlab!62948))
- [Prevent prepending single quote to issue CSV exports](gitlab-org/gitlab@b4d1a6ed5145e38a7edb510155e396b7802e5f36) ([merge request](gitlab-org/gitlab!62730))
- [Record impersonation details on Auditor](gitlab-org/gitlab@20b7c5d6c53acfc41d087a5367ddd5b882a47dab) ([merge request](gitlab-org/gitlab!62257)) **GitLab Enterprise Edition**
- [Set default retries for mailers to 3](gitlab-org/gitlab@d1b9c81059109afca661427a874b12c64f1f5bba) ([merge request](gitlab-org/gitlab!62814))
- [Fix non-custom Total stage in VSA](gitlab-org/gitlab@df2c5bb9cc2cf625722b71a4f706ccf9839c47d7) ([merge request](gitlab-org/gitlab!62889)) **GitLab Enterprise Edition**
- [Do not enforce UTF-8 in any forms](gitlab-org/gitlab@c697eb6e8f77df493e6da85cb0d004400fbe470c) ([merge request](gitlab-org/gitlab!62820))
- [Fix indexer running longer than lock timeout](gitlab-org/gitlab@be5ddaf6b670593968f1d00877d5f63129508d53) ([merge request](gitlab-org/gitlab!62366)) **GitLab Enterprise Edition**
- [Fix junit report attachment in tests with error](gitlab-org/gitlab@15b5b59254c7e4ace8a92827e529ccdf69d6d451) ([merge request](gitlab-org/gitlab!62874))
- [Force use of UTC in formatting seconds into MM:SS](gitlab-org/gitlab@347ae9254788d47d0ec0a536c22021af5318e23b) ([merge request](gitlab-org/gitlab!62873))
- [Fix known issues with the CSP](gitlab-org/gitlab@c827770c8a2f7bda98d88211a8d07aef9e42c87a) ([merge request](gitlab-org/gitlab!62615))
- [Fix CSP issues related to captchas](gitlab-org/gitlab@c7f10973eab348ab62c5fe6907a328cc83cd862c) ([merge request](gitlab-org/gitlab!62849))
- [Fix "Security & Compliance" access for auditors](gitlab-org/gitlab@9541fe044ca52c7daebd7608e2ef75c6201e6b98) ([merge request](gitlab-org/gitlab!62837)) **GitLab Enterprise Edition**
- [Add the deduplication hash to the job payload](gitlab-org/gitlab@88ace86eb8442fbf849fb2ccb23cb0cc4d82fc91) ([merge request](gitlab-org/gitlab!62842))
- [Authorize GraphQL Vulnerabilities::IssueLink type](gitlab-org/gitlab@90692666eb913398888c434514a59cb2d3716d66) ([merge request](gitlab-org/gitlab!62815)) **GitLab Enterprise Edition**
- [Fix the `requiring_cleanup` scope](gitlab-org/gitlab@1d40aa404a84d6d04d6b401cfba239f6f4163a46) ([merge request](gitlab-org/gitlab!62827))
- [Do not remove export when uploading via URL](gitlab-org/gitlab@c2e09e8fae35f18d8ad53a34cd932a4b387c1e71) ([merge request](gitlab-org/gitlab!62763))
- [Set iteration state based on updated dates](gitlab-org/gitlab@97809627d8fe274c4fe3a84c2ecfedd165dcbeef) ([merge request](gitlab-org/gitlab!62558))
- [Update google-protobuf to v3.17.1](gitlab-org/gitlab@bc8f2e0d6d4ffd8ca0195295e5c0b2d208f287e0) ([merge request](gitlab-org/gitlab!62792))
- [Fix CSS for MR widget for dark mode](gitlab-org/gitlab@978ea85dd470ec12787f4435ed77586ab8742483) ([merge request](gitlab-org/gitlab!62783))
- [Fix shared runner minutes reset on self-managed](gitlab-org/gitlab@bba3204bf91bff6d8b13aefb91b13af6347d5270) ([merge request](gitlab-org/gitlab!62781)) **GitLab Enterprise Edition**
- [Fix layout, spacing, and style of reaction emoji on issuables](gitlab-org/gitlab@60b799d6b3e36ddd59f0383c9a579be64bccb394) ([merge request](gitlab-org/gitlab!62621))
- [fix: Update StoreReportService to better unique signature violations](gitlab-org/gitlab@2779305502de592a784a477a0d1768ffb4e3db2b) ([merge request](gitlab-org/gitlab!61269)) **GitLab Enterprise Edition**
- [Update startup css which fixes login pages](gitlab-org/gitlab@b609d6eb12395694cd51fed21944b5d4370d33f5) ([merge request](gitlab-org/gitlab!62486))
- [Make arrow on generic report section clickable](gitlab-org/gitlab@c5971a111941e2ce0b9a2d50923b427999627c7d) ([merge request](gitlab-org/gitlab!62429)) **GitLab Enterprise Edition**
- [Determine Jira deployment_type based on URL](gitlab-org/gitlab@28a4e491b5a7b058a51c8b5813ea5a511c7a3f8c) ([merge request](gitlab-org/gitlab!62040))
- [Fix ability for non project member to subscribe to an issue](gitlab-org/gitlab@b444b07ff8b666a6b53f2111166cfbeaa8c9c7df) ([merge request](gitlab-org/gitlab!61953))
- [Fix Releases page/GraphQL pagination](gitlab-org/gitlab@52341a0b230e5d09c2daa40448c1125419695950) ([merge request](gitlab-org/gitlab!62256))
- [Overhaul CSS in performance bar in Dark mode](gitlab-org/gitlab@47bee03e03651809cd7198b574265467746d962c) ([merge request](gitlab-org/gitlab!61552))
- [Fix `Security::FindingsFinder` for multiple report artifacts](gitlab-org/gitlab@d6e099293532827e3b2fa1da127fc87ab8aea112) ([merge request](gitlab-org/gitlab!62643)) **GitLab Enterprise Edition**
- [Stop using basic auth for GKE cluster creation](gitlab-org/gitlab@c1f0d4ada8ae360d58612c3282682e57d4d69360) ([merge request](gitlab-org/gitlab!62518))
- [Allow error-free deletion of orphaned group members](gitlab-org/gitlab@b5775a56be21c5c2597c70ad367473efa413cef0) ([merge request](gitlab-org/gitlab!62603))
- [Fix "Leave this group" button for subgroups listed in group overview](gitlab-org/gitlab@07765ef3740422208fb40a4630b0326e8d28a1e9) ([merge request](gitlab-org/gitlab!62488))
- [Adds a conditional to not uncheck an unchecked MR](gitlab-org/gitlab@4e5989253ccedc0e655afee37406d6efcfbfae4b) ([merge request](gitlab-org/gitlab!61759))
- [Fix alignment of global alerts](gitlab-org/gitlab@d5c248137c71af978b6c55dc6c4c60bc216bd1d9) ([merge request](gitlab-org/gitlab!62498))
- [Fix vuln scanner filter not working when report type has no scanner IDs](gitlab-org/gitlab@5fd9f9c9a150c31d8e77b7dc7a7e76cd7958e7ab) ([merge request](gitlab-org/gitlab!62565))
- [Call RedisHllUserEvent only when a user is set](gitlab-org/gitlab@95b4471661be21eca12160fd29702c92d8f95725) ([merge request](gitlab-org/gitlab!62560))
- [Fix Gitpod url in user preferences](gitlab-org/gitlab@85a3357a2518db44fba9b3541c41e947b3a89e61) ([merge request](gitlab-org/gitlab!62544))
- [Fix Jira issue fields not disabled when inheriting](gitlab-org/gitlab@0570f7362da2fb3629313a4c69adaa8ff3b4f6d4) ([merge request](gitlab-org/gitlab!62364))
- [Handle invalid project ID in reply-by-email](gitlab-org/gitlab@da6bd2eb0e47696bbbdbfac960801dbfb17b78ec) ([merge request](gitlab-org/gitlab!62530))
- [Fix tooltip positioning on job view list](gitlab-org/gitlab@57b32f6b93eea94c397a793627575b87335a9013) ([merge request](gitlab-org/gitlab!62504))
- [Fix typo showing error message after destroy page](gitlab-org/gitlab@115ab6ee52ce5924a187d735e85c96c8e1a9ec5d) ([merge request](gitlab-org/gitlab!62478))
- [Process emails for projects with not unique service desk keys](gitlab-org/gitlab@cf9290cab12080d87b699cd52aa880fa91d84fb9) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62139))
- [Fix JavaScript initialization in readonly mode](gitlab-org/gitlab@cf425a12d9177b76a86a3928ad641e476c15f10e) ([merge request](gitlab-org/gitlab!62427))
- [Update Gitaly's binary path in init.d scripts](gitlab-org/gitlab@e2dbfb22e6f5a0d28006d4f1684200049a2b1cb0) ([merge request](gitlab-org/gitlab!62456))
- [Pin the GKE version to 1.18 for cluster creation](gitlab-org/gitlab@a5c82ceb7e13d3de00440ff252bcc8b142e857a7) ([merge request](gitlab-org/gitlab!62341))
- [Fix N+1 problem for ForksController#new](gitlab-org/gitlab@614a0c47aca587482810d54637eef5c9938b39ab) ([merge request](gitlab-org/gitlab!62323))
- [Fix missing system notes and system events on create issue](gitlab-org/gitlab@25b6738ccefc0717c04d6eba8548f6bbfbf80745) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61746))
- [Avoid conflicting workers in `authorized_projects` namespace](gitlab-org/gitlab@2e11d9f55e3c730097cb19c07fee9181205fb9ff) ([merge request](gitlab-org/gitlab!62442))
- [Fix humanized size numbers for negative values](gitlab-org/gitlab@69f1f173d5634cfb24021b4f595a9759eb7545e5) ([merge request](gitlab-org/gitlab!62441))
- [Fix double render in project's git URL redirect](gitlab-org/gitlab@45512b2c5f3aec8034e961b09f10443911076d13) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62053))
- [Fix issue with frames not loading in Safari](gitlab-org/gitlab@5341e159d714e973489c83daa383e9369c5f1423) ([merge request](gitlab-org/gitlab!62421))
- [Fix timeouts when destroying a project with many notes](gitlab-org/gitlab@3e5a944e4a2614fc4b829e6dd14f79ea8c2c4823) ([merge request](gitlab-org/gitlab!62389))
- [Check user permissions for pipeline operations](gitlab-org/gitlab@2424584193443b4666e7d41ba5e1d602d065c1b7) ([merge request](gitlab-org/gitlab!62137))
- [Include environments from current and descendant pipelines](gitlab-org/gitlab@6edd3da0b2c76a09bd986991b2d400007729a785) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62080))
- [Render Discover link for `Security & Compliance`](gitlab-org/gitlab@74fb4d54fbf36223871cda48c9667b9ddb465f4d) ([merge request](gitlab-org/gitlab!62019)) **GitLab Enterprise Edition**
- [Avoid updating Elasticsearch when project is pending_delete](gitlab-org/gitlab@a574bbe0d8c95d9b656045536403796ffa9b25ed) ([merge request](gitlab-org/gitlab!61917))
- [Remove feature flag around policy alert creation](gitlab-org/gitlab@ec1712284b282e2fc82c22c60796ce6b2290f0c1) ([merge request](gitlab-org/gitlab!62319)) **GitLab Enterprise Edition**
- [Fix bulk edit vulnerability dropdown layering issue](gitlab-org/gitlab@b361a36073ecea89fdb89480afe86f7a3f4e769d) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62317)) **GitLab Enterprise Edition**
- [Bump Cluster Applications version which includes:](gitlab-org/gitlab@5d05e470b6b4d81ba65f29a11122a17a11fcafea) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62117))
- [Only check index status if modifying Advanced Search form](gitlab-org/gitlab@0b14d4f8e9ef58a99f61262c693c77324dd85957) ([merge request](gitlab-org/gitlab!62299))
- [Preserve epic labels association during Group Import/Export](gitlab-org/gitlab@2ffe53ed1779e7b96f89f9368e803593dcc00053) ([merge request](gitlab-org/gitlab!62299))
- [Hide billing plans with truthy hide_card attribute](gitlab-org/gitlab@2bd16f0afe9bf1b1e383ff69349b20ddfad8f69b) ([merge request](gitlab-org/gitlab!62299))
- [Check for credit card when playing manual jobs](gitlab-org/gitlab@6349060e62348f90211b988c53afc6fef4f1e76b) ([merge request](gitlab-org/gitlab!62299))
- [Ensure post-update actions are applied when assignees change](gitlab-org/gitlab@7b0078180b70b762aaa72c812fea5339d90ed755) ([merge request](gitlab-org/gitlab!62012))
- [Fix errors in instance and group-level integration pages for some integrations](gitlab-org/gitlab@4225a25961f403f267fbad55bb0e5d9a9d0ed5d6) ([merge request](gitlab-org/gitlab!62012))
- [Return 404 from branches API when repository does not exist](gitlab-org/gitlab@9f9fce8261e9da6832915fb44667e7048909765a) ([merge request](gitlab-org/gitlab!62012))
- [Fixed Rails Save Bang offenses in few spec/models/* files](gitlab-org/gitlab@baef3bca17f8c00301ec95c8626ce5dfa7d8aada) ([merge request](gitlab-org/gitlab!62012))
- [Fix blob preview error](gitlab-org/gitlab@7a5bbd2e4397e66429bcce4f4fa81be54c176e97) ([merge request](gitlab-org/gitlab!62012))
- [Fix atom feed with push events for multiple tags](gitlab-org/gitlab@c4769d7ea59c0f3687237d71a4ebc493a56bd668) ([merge request](gitlab-org/gitlab!62012))
- [Resolve Time tracking report is bugged on GraphQL boards](gitlab-org/gitlab@d7ae653b464937a957bac21621f48447b9204edc) ([merge request](gitlab-org/gitlab!62012))
- [Fixed Rails Save Bang offenses in few spec/models/* files](gitlab-org/gitlab@50b037b744fe6cd3271ffd38b985b318e62a3703) ([merge request](gitlab-org/gitlab!62012))
- [Properly process stale ongoing container repository cleanups](gitlab-org/gitlab@948413b6b3961a850bcdce2f9f1776741bbc0ea6) ([merge request](gitlab-org/gitlab!62012))
- [Execute member hooks only if an associated user is present](gitlab-org/gitlab@473656bab27d7227d48d85011d6bf25e9752a855) ([merge request](gitlab-org/gitlab!62012))
- [Fix `pry` debugging location with `pry-byebug` and `pry-shell` by updating the `pry-shell` gem](gitlab-org/gitlab@57dfda62eb0d94a35975bda5af9de1034c53a086) ([merge request](gitlab-org/gitlab!62012))
- [Fix permission check when setting issue/merge request subscription in GraphQL API.](gitlab-org/gitlab@77dea32e5921154fd6613021a73c751f626baaef) ([merge request](gitlab-org/gitlab!62012))
- [Fix pipeline graph undefined needs error](gitlab-org/gitlab@68ce1ff09a3f56a71d791f736db7ee26d492dcd1) ([merge request](gitlab-org/gitlab!62012))
- [Prevent overflows in WebHook#backoff_count](gitlab-org/gitlab@db0366a681a5cd35b13a2fa56370287c3543d7b4) ([merge request](gitlab-org/gitlab!62012))
- [Prevent overflows in WebHook#backoff_count](gitlab-org/gitlab@2ba4cab79d2c482aba89d31729466c75e64f7034) ([merge request](gitlab-org/gitlab!62202))
- [Ensure that we always run the update worker](gitlab-org/gitlab@185fea33cd8d1e39e96a104dccb20db818c97d90) ([merge request](gitlab-org/gitlab!61897))
- [Execute member hooks only if an associated user is present](gitlab-org/gitlab@37cbe23aa7076d74c12eb4210fc802a62d8ef294) ([merge request](gitlab-org/gitlab!62175))
- [Check for credit card when playing manual jobs](gitlab-org/gitlab@f65f4827115f90734c6f49fb578ee3952e884a4c) ([merge request](gitlab-org/gitlab!62124))
- [Added changelogfile](gitlab-org/gitlab@4caa2dfca72d5dfeeb9f8859718d0d8ae999124c) ([merge request](gitlab-org/gitlab!62165))
- [Fixed offenses in spec/models/* part 5](gitlab-org/gitlab@b4acc814eac0a235c38f86ced8a2d141eda9b718) ([merge request](gitlab-org/gitlab!62165))
- [Fix blob preview error](gitlab-org/gitlab@2b72facccc9a36ebe346797b643811fd722b4380) ([merge request](gitlab-org/gitlab!62128))
- [Return 404 from branches API when repository does not exist](gitlab-org/gitlab@5dba6b526e91d5b9e1ae611b38613ad7217a2e6f) ([merge request](gitlab-org/gitlab!62089))
- [Preserve epic labels association during Group Import/Export](gitlab-org/gitlab@f105ac61bc42098a9c02b40e82c613a7c9ece570) ([merge request](gitlab-org/gitlab!62074))
- [Fix atom feed with push events for multiple tags](gitlab-org/gitlab@cbf91d4bd789bafa23227ca19b5e1c893cd42532) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62059))
- [Fixed offenses in spec/models/* part 2](gitlab-org/gitlab@17afb671c4e7b0cf95c762e2fb04fe20302db682) ([merge request](gitlab-org/gitlab!61961))
- [Fix UI bug overflowing the text in TODO list](gitlab-org/gitlab@0eb1b9d3ea9deb9ac09582ecacd23cadc5d7c9f5) ([merge request](gitlab-org/gitlab!61910))
### Changed (155 changes)
- [Move admin cohorts to separate controller](gitlab-org/gitlab@e6fb06fb73ab8a639bac04077c07f5b54670e2eb) ([merge request](gitlab-org/gitlab!64015))
- [Improve beta state communication of content editor](gitlab-org/gitlab@e36a419e2d4fad464bacb2ebcb15fe1c1dd6a02e) ([merge request](gitlab-org/gitlab!63775))
- [DA use dropdown for adding groups](gitlab-org/gitlab@8bd72f34f1c2f3568ed9f338041bd9b9f479026d) ([merge request](gitlab-org/gitlab!63746)) **GitLab Enterprise Edition**
- [Remove ci_register_job_service_one_by_one feature flag](gitlab-org/gitlab@564e6f2260286e5364303464fd23973eb04ccf07) ([merge request](gitlab-org/gitlab!64121))
- [Use database as SSOT for diffs whitespace](gitlab-org/gitlab@24135de77137981c82bcd7268c3875bf7f80a874) ([merge request](gitlab-org/gitlab!63927))
- [Namespace translations in view switcher for clarity](gitlab-org/gitlab@e7d63b3c8512fa486c8d785d7b4f1f5906ac8cc5) ([merge request](gitlab-org/gitlab!64102))
- [Show update branch message when MR branch diverged from target branch](gitlab-org/gitlab@7e3da6b74001c4f3661799c3eac06418e9221bbb) ([merge request](gitlab-org/gitlab!64090)) **GitLab Enterprise Edition**
- [Backend support for multi-select project search](gitlab-org/gitlab@40b38dd3675eddb06a3c43aca4e9c9dbbb180a5a) ([merge request](gitlab-org/gitlab!62606)) **GitLab Enterprise Edition**
- [Use GraphQL for Time tracking info on Issuables](gitlab-org/gitlab@ea7b1fa1ffe5c4d8cde14c146917ec62707a2736) ([merge request](gitlab-org/gitlab!63773))
- [Bump DAST to use version 2](gitlab-org/gitlab@322e7b3c13205f887449f8daac9fc4baf632f772) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62597)) **GitLab Enterprise Edition**
- [Fix Helm version regexp to match unprefixed semver too](gitlab-org/gitlab@9ec76dc9a43ffb2032f9a276a314d270b96d5932) ([merge request](gitlab-org/gitlab!63967))
- [Add deprecation notice to Managed-Cluster-Applications.gitlab-ci.yml](gitlab-org/gitlab@1983d1f28dee21f029776bb41ee53aeaaee021e9) ([merge request](gitlab-org/gitlab!64050))
- [Hide tooltips and popovers with escape key](gitlab-org/gitlab@6dcc5b7b98b37aded59a4f217e39729002065fa0) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63922))
- [Adds more identifiers to Seat Link](gitlab-org/gitlab@9dc094515375295ea01f49cf67f3c41847ec07d3) ([merge request](gitlab-org/gitlab!63909)) **GitLab Enterprise Edition**
- [Usage dictionary: update name, Group Overview](gitlab-org/gitlab@67c7f965a7a4293cb5b6329da915692b0c8a51c6) ([merge request](gitlab-org/gitlab!63780)) **GitLab Enterprise Edition**
- [Set PostgreSQL 12 as the minimum supported version](gitlab-org/gitlab@50fe067049b75b26b8223470803092a10a23cab1) ([merge request](gitlab-org/gitlab!63471))
- [Fix: update incident sidebar severity title margin](gitlab-org/gitlab@e0d2cfc76405f3083d227b5c42dbdadc03fc42ee) ([merge request](gitlab-org/gitlab!63998))
- [Add webhook rate-limit threshold for Free plan on gitlab.com](gitlab-org/gitlab@772754bc41547860405e55868758f0566c878c22) ([merge request](gitlab-org/gitlab!62918))
- [Update instructions how to initialize/clone git repository](gitlab-org/gitlab@c73781b1c180543c5083bb40796420f2cc613b7c) ([merge request](gitlab-org/gitlab!63985))
- [Add indices for created_at+id and contacted_at+id on ci_runners](gitlab-org/gitlab@53d0a6326a42e3dce9d040497440604b1f201d41) ([merge request](gitlab-org/gitlab!62310))
- [Update Diff UI settings to match style guides](gitlab-org/gitlab@0c95661892bb830056d7d3dee2996e9a192db3e1) ([merge request](gitlab-org/gitlab!62500))
- [Relate Test Reports and Requirement Issues](gitlab-org/gitlab@5927399c2175fdbba680b01690c1ff8c3029305e) ([merge request](gitlab-org/gitlab!63512))
- [Add verification for MR diffs using SSF](gitlab-org/gitlab@9d390d48b98be62beb953ce45fa3b437101cdf6c) ([merge request](gitlab-org/gitlab!63309)) **GitLab Enterprise Edition**
- [Make Alert details table attributes clickable](gitlab-org/gitlab@976d9cf0f0a0dd70e2af14858aff43efd404d006) ([merge request](gitlab-org/gitlab!63593))
- [Add migrations for adding verification for MR diffs](gitlab-org/gitlab@9fadd0b863d796b876ed0f627323e663602a9acb) ([merge request](gitlab-org/gitlab!60935))
- [Allow guest user to assign issue metadata on create](gitlab-org/gitlab@ae50169e7f121dd76ccc516ab2920ed4b829848f) ([merge request](gitlab-org/gitlab!62816))
- [Replace plugin.log with file_hook.log](gitlab-org/gitlab@9602f4cfcd1eb94c98455a07bb0586b30ad87633) ([merge request](gitlab-org/gitlab!57515))
- [Restore previous month perspective](gitlab-org/gitlab@478e20ce28fb7b9df789ea42d1ecf7ab9898327c) ([merge request](gitlab-org/gitlab!63217)) **GitLab Enterprise Edition**
- [Update Styling of MR-Widget](gitlab-org/gitlab@38842cbde3cf4ed7fcdbb871cc14e88cf33c1924) ([merge request](gitlab-org/gitlab!63736))
- [Enforce SSH key expiration by default](gitlab-org/gitlab@f023457f2203d08c0bce352c6422191d760d6e16) ([merge request](gitlab-org/gitlab!62432))
- [Tidy up language on access tokens UI page](gitlab-org/gitlab@a192f5d2ca5be0081203a6967ef77f73504c77b8) ([merge request](gitlab-org/gitlab!62939))
- [Move "Appearances" menu item into "Settings" in Admin Area](gitlab-org/gitlab@c08debbc2cad25b401507eebf48e9e45f2aa9718) ([merge request](gitlab-org/gitlab!62522))
- [Geo: Remove feature flag geo_terraform_state_version_verification](gitlab-org/gitlab@eb1a208ddccc1c1b09bf50663a9d9374907a19a3) ([merge request](gitlab-org/gitlab!63661)) **GitLab Enterprise Edition**
- [Retry pipelines in the background](gitlab-org/gitlab@0852bacfd11317532b79acedd6fe2c6b3cfe23d0) ([merge request](gitlab-org/gitlab!63789))
- [Remove feature flag `introduce_marker_ranges`](gitlab-org/gitlab@ce8ec7312bea6c31e84dce00eb6b2b33b41b9c85) ([merge request](gitlab-org/gitlab!59251))
- [Add input rules for creating links](gitlab-org/gitlab@87b4bb69e8796470e5d63e5b10d1d4dfdfe8519a) ([merge request](gitlab-org/gitlab!63664))
- [Add new way of encrypting tokens](gitlab-org/gitlab@1914a1e3493f8b87cc1948d5b29f755af7a72c20) ([merge request](gitlab-org/gitlab!58902))
- [Remove maven metadata CTE FF](gitlab-org/gitlab@f6b9d3ed06497eea3d39eb3cf3838965e1e28eb7) ([merge request](gitlab-org/gitlab!63657))
- [Bump major version of auto-deploy-image in Auto Deploy template](gitlab-org/gitlab@1051cc3ac6e0837aecc091159c632e06619838ee) ([merge request](gitlab-org/gitlab!62876))
- [Fix title, value spacing of various sidebar blocks](gitlab-org/gitlab@8914310b7b4b1e2961a16b49cffc642f74300120) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61650)) **GitLab Enterprise Edition**
- [Expose include_ancestor_groups arg for epics query](gitlab-org/gitlab@87062904489597a8ab18b8fc96ca4d7231a27557) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63374)) **GitLab Enterprise Edition**
- [Change vulnerability filters All option text to be "All <filter name>"](gitlab-org/gitlab@fd6379ae0eb88bbc97767371cdd697a75f8e8e28) ([merge request](gitlab-org/gitlab!63709)) **GitLab Enterprise Edition**
- [Replace work_in_progress with draft](gitlab-org/gitlab@05c9b9ed141d9a0ab037a407da26f9a976d25e42) ([merge request](gitlab-org/gitlab!63473))
- [Successful sync should cause verification](gitlab-org/gitlab@f9e904874082ecb3471a1309b93055c9009eda1c) ([merge request](gitlab-org/gitlab!63104)) **GitLab Enterprise Edition**
- [Wait until DB is ready to list data on legacy storage](gitlab-org/gitlab@d2eea674fd70f5874dcc19729e2916fa5e24ddb6) ([merge request](gitlab-org/gitlab!63692))
- [Add level four heading to text style dropdown](gitlab-org/gitlab@76f4d550751c6be3feb3ed0b82840453e5d5f1e8) ([merge request](gitlab-org/gitlab!63639))
- [Reintroduce DA group max requests](gitlab-org/gitlab@c441ef23d2107ea860d74baccdc867e8dfa36a51) ([merge request](gitlab-org/gitlab!63628)) **GitLab Enterprise Edition**
- [Remove env var restriction for Database load balancing](gitlab-org/gitlab@5548633db5395f78afa55535e67f5f6f75c150db) ([merge request](gitlab-org/gitlab!63627))
- [Hide scanner filter vendor header when there's only the GitLab vendor](gitlab-org/gitlab@b6a51e4cf99543174e80359db44c049a1e301156) ([merge request](gitlab-org/gitlab!63596)) **GitLab Enterprise Edition**
- [Add vulnerability activity filters in GraphQL](gitlab-org/gitlab@830c9f6346309aa82e08368088fc8174b26a3108) ([merge request](gitlab-org/gitlab!63311)) **GitLab Enterprise Edition**
- [Update the vendored cluster management Project Template](gitlab-org/gitlab@7d650079171513057435268d7fbc71eb6f7af941) ([merge request](gitlab-org/gitlab!63577))
- [Projects API show the project's squash option](gitlab-org/gitlab@631ee2c376f6423642ab6cff204f359afa002eec) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63543))
- [Add git push counter to geo node status](gitlab-org/gitlab@70568e0a583f54e5c440cc56d37feb015e48dfec) ([merge request](gitlab-org/gitlab!63427)) **GitLab Enterprise Edition**
- [Adjust Button Sizes on Secure MR Widget](gitlab-org/gitlab@9c5f6b9e80467e8f02274e60b91991574b2a665b) ([merge request](gitlab-org/gitlab!63407))
- [Apply Slack's UI guide to channel placeholders](gitlab-org/gitlab@581a71f5e532dd5d05a49038fa277cfe13910af0) ([merge request](gitlab-org/gitlab!63046))
- [Remove DA max requests for groups](gitlab-org/gitlab@5acc14099db7e2741050222f123682381bbcadf0) ([merge request](gitlab-org/gitlab!63491)) **GitLab Enterprise Edition**
- [Rollout arel_package_scopes feature](gitlab-org/gitlab@edcaa59c6e1c57c119f4a32fe47ad74e4eb3e720) ([merge request](gitlab-org/gitlab!62614))
- [Allow iteration cadence argument on iteration creation](gitlab-org/gitlab@aecc475aa5e6d7bf8f7729f1f01f31984eb51a10) ([merge request](gitlab-org/gitlab!63505))
- [Migrate board label select to Vue](gitlab-org/gitlab@233554a8710d8267d372be1a9a6fc6e228c9e320) ([merge request](gitlab-org/gitlab!62626))
- [Remove old Advanced Search migrations](gitlab-org/gitlab@42eb2e7f830aa4b82413cb484450dfb2fce2f8df) ([merge request](gitlab-org/gitlab!63001)) **GitLab Enterprise Edition**
- [Added a check for user: null](gitlab-org/gitlab@198f25dfee0021b45181b7717002264782d60e70) ([merge request](gitlab-org/gitlab!63167))
- [Enable :disable_service_templates FF by default](gitlab-org/gitlab@f6c9bfb440831a2086ef8c756c771658f86f53e5) ([merge request](gitlab-org/gitlab!61312))
- [Remove load_balancing_atomic_replica feature flag](gitlab-org/gitlab@5bdb634f8ae2c24633fad3a50c5eaaa8683574b1) ([merge request](gitlab-org/gitlab!63380))
- [Replaces Klar by Trivy from the specs](gitlab-org/gitlab@a1e6576cf6513bc6b8a4b767cb1a221d69f77311) ([merge request](gitlab-org/gitlab!62328))
- [Add vulnerability scanner ID filter in GraphQL](gitlab-org/gitlab@b5336ba15ce135239201bab8ab3544ed453a2aae) ([merge request](gitlab-org/gitlab!63335)) **GitLab Enterprise Edition**
- [Right align action buttons on jobs index page](gitlab-org/gitlab@c0ecc3c392b58dce17ecef2e43f73de50c57b2cb) ([merge request](gitlab-org/gitlab!62869))
- [Move component and spec to static site editor](gitlab-org/gitlab@ead8cb57e15b21cbcc90c50026fc08742b0b94a1) ([merge request](gitlab-org/gitlab!55934))
- [Geo Node 2.0 - Remove geo_nodes_beta FF](gitlab-org/gitlab@35e5f26ab079c12af3286413d8ee5fa1442d6550) ([merge request](gitlab-org/gitlab!62309)) **GitLab Enterprise Edition**
- [Remove geo_lfs_object_replication feature flag](gitlab-org/gitlab@3fbea8278a43cb91415cf76d634a1da74a0fdbef) ([merge request](gitlab-org/gitlab!62039)) **GitLab Enterprise Edition**
- [Increase max groups fetched for DA](gitlab-org/gitlab@d0ea76aec56d87bac687ff85aa95737e5ab3262b) ([merge request](gitlab-org/gitlab!63415)) **GitLab Enterprise Edition**
- [Update breadcrumbs for project imports](gitlab-org/gitlab@8685b3538adb1b4b92034eb95b399c71a661d9a3) ([merge request](gitlab-org/gitlab!63089))
- [Revise UI phrasing around force pushes](gitlab-org/gitlab@162830f52299e8beb3d902b36bf14cf3d2eed897) ([merge request](gitlab-org/gitlab!63310)) **GitLab Enterprise Edition**
- [Upgrade to Mermaid v8.10.2](gitlab-org/gitlab@d886a3fb6390b22cfcf05d91bfba244412a0a869) ([merge request](gitlab-org/gitlab!63354))
- [Enable validate_import_decompressed_archive_size feature flag by default](gitlab-org/gitlab@a180695a5b50e8141f91dd3545ab4d8f2a952bd3) ([merge request](gitlab-org/gitlab!63025))
- [Improve VSM date tooltip](gitlab-org/gitlab@59fa8146ed11ddda9ee2c3bc7eef618e246abd8f) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62194)) **GitLab Enterprise Edition**
- [Pass through escaped variable values to Runner](gitlab-org/gitlab@e5cf22fbcbf6d86a792a3748f29b73f1a7e33f0a) ([merge request](gitlab-org/gitlab!56603))
- [Update deprecated GlIcon size in IDE branch search](gitlab-org/gitlab@c9d6a5a5c80171ebd654b3a19eaadf8ca579f989) ([merge request](gitlab-org/gitlab!62782))
- [Use application/octet-stream as Content-Type for files in CI artifacts](gitlab-org/gitlab@c487ba4597d1ae9b3a283480c374d612d85e3e5c) ([merge request](gitlab-org/gitlab!63273))
- [Rename Browser Performance template jobs](gitlab-org/gitlab@eb7f75682911d87dbd42901c6f88715bd40c74d6) ([merge request](gitlab-org/gitlab!62727))
- [Rearrange 'Security & Compliance' menu items](gitlab-org/gitlab@7d95cdb47bc13ac6ffedb55feed5163b6745487d) ([merge request](gitlab-org/gitlab!62448)) **GitLab Enterprise Edition**
- [Enable prevent_retry_of_retried_jobs feature flag on by default](gitlab-org/gitlab@4b552ded173c95b8795b48c4a34f33999c01bb41) ([merge request](gitlab-org/gitlab!63112))
- [Simplify npm.gitlab-ci.yml using new CI variables](gitlab-org/gitlab@a945fb61276a3ef06f7a76afcc0db2cc44fb8523) ([merge request](gitlab-org/gitlab!56141))
- [Enable cross pipeline artifacts download](gitlab-org/gitlab@16da2f245ab8c801a1ea00b534f278997d6764d6) ([merge request](gitlab-org/gitlab!63074))
- [Rename read_vulnerability to read_security_resource policy](gitlab-org/gitlab@ee4fe811415971df46610f5b64f39bbcda848b3d) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58704)) **GitLab Enterprise Edition**
- [Remove feature flag usage_data_p_terraform_state_api_unique_users](gitlab-org/gitlab@ca975e5303bb9eaa5a48148773d734288cd4b804) ([merge request](gitlab-org/gitlab!62975))
- [Remove feature flag create_cloud_run_clusters](gitlab-org/gitlab@b878883f6a80fc670b8112f91b0c82da4db2b965) ([merge request](gitlab-org/gitlab!62977))
- [Remove ci-trace-read-consistency feature flag](gitlab-org/gitlab@2d3a33230fba32f4046f0709a8142741f98db110) ([merge request](gitlab-org/gitlab!62840))
- [Added path navigation to project VSA](gitlab-org/gitlab@937099d47529ea384404eeacdd8c6aeb653d2d16) ([merge request](gitlab-org/gitlab!62630)) **GitLab Enterprise Edition**
- [Enable ci_fix_commit_status_retried by default](gitlab-org/gitlab@406ad6b0bbc450a757e7ca549a6df63d35a3b0f2) ([merge request](gitlab-org/gitlab!62907))
- [Change docs link style in group CI settings](gitlab-org/gitlab@b2cdff999c7e3f591c013a35e18106194500b966) ([merge request](gitlab-org/gitlab!62065))
- [Upgrade Sentry gem to 4.4.0](gitlab-org/gitlab@fa3e6a81fbc036f67a17d6236ddbf8dcf631aed0) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62387))
- [Refactor performance bar cookie check](gitlab-org/gitlab@91490dca3a323e322fff16661065f50c899160d4) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62675))
- [Database Load Balancing feature available in GitLab Free](gitlab-org/gitlab@064e9d3c5fbb65ee7cbca4eb54c9c58c77ab5c4d) ([merge request](gitlab-org/gitlab!62739))
- [Align titles and icons in Security pages](gitlab-org/gitlab@d98f9442f52b198bba31a7116665b54b915afc63) ([merge request](gitlab-org/gitlab!62841)) **GitLab Enterprise Edition**
- [Prevent projects with same slug from having same project key](gitlab-org/gitlab@85177b67e9b5ff8f3378b3f7b6ab8f251dd3d785) ([merge request](gitlab-org/gitlab!62240))
- [Allow reporters to read project statistics](gitlab-org/gitlab@af23428c618e5547c03646e6f674743c7971aa0a) ([merge request](gitlab-org/gitlab!62736))
- [Simplify network policy sidebar](gitlab-org/gitlab@b477ebde931c6f1624c6b26ab8eca432ec09ac85) ([merge request](gitlab-org/gitlab!62134)) **GitLab Enterprise Edition**
- [Rename instance_statistics_measurements_table](gitlab-org/gitlab@a29bffcdc0a319fe4f90555787755e6a490fcd06) ([merge request](gitlab-org/gitlab!62797))
- [Converted issuable id to string](gitlab-org/gitlab@52580c529627d29679bc4b784630fff55082c127) ([merge request](gitlab-org/gitlab!62804))
- [Fixed scroll on todos](gitlab-org/gitlab@bcd934db8c991d197ff5683942ab2fabc3d1a36d) ([merge request](gitlab-org/gitlab!62807))
- [Replace Flash with GlAlert in Boards](gitlab-org/gitlab@76c6c7538c0860ba0f34d2d1cd15e3daf458dac7) ([merge request](gitlab-org/gitlab!61969))
- [Improve fork error message](gitlab-org/gitlab@1d45ae6f9c8f681c34ad55dc5234b857e30929ca) ([merge request](gitlab-org/gitlab!62664))
- [Allow `extra` parameter for Snowplow events](gitlab-org/gitlab@b75c135b4b4c588dadfc9540f16c06e450406d91) ([merge request](!56869))
- [Import group epics via ndjson when using Bulk Import](gitlab-org/gitlab@03b2fe02d5c4d118382b4f9676d0def6ca990d88) ([merge request](gitlab-org/gitlab!62590)) **GitLab Enterprise Edition**
- [What's New content link opens in new tab](gitlab-org/gitlab@af59ed027df3fec6caba85f48247a148b5b57225) ([merge request](gitlab-org/gitlab!61954))
- [No Longer Send Legacy Feature Flags](gitlab-org/gitlab@d52208fc3e180de5f84ddb6906b1fdb1afc6f739) ([merge request](gitlab-org/gitlab!62484))
- [Strip out junit screenshot path](gitlab-org/gitlab@c13fdd442560d3d060b29fab2ad6f3b1eecd7523) ([merge request](gitlab-org/gitlab!62520))
- [Remove unused ProcessPrometheusAlertWorker worker](gitlab-org/gitlab@9ea5ec8d23b968d31c7e5709145505d9d8ce2ab9) ([merge request](gitlab-org/gitlab!62579))
- [Rename experiment_subjects group_id column](gitlab-org/gitlab@66f28b08867a6678b3168e28ca4459539dfd5a8f) ([merge request](gitlab-org/gitlab!62696))
- [Remove unused ProcessAlertWorker](gitlab-org/gitlab@f7a81d88c89f5ab0b3bc50ae32c41b10e8516dbf) ([merge request](gitlab-org/gitlab!62582))
- [Update pipeline failed notification emails to refer to jobs](gitlab-org/gitlab@c01132d844c88a0fab88d7a94679ccc6ff185d93) ([merge request](gitlab-org/gitlab!62671))
- [Improve approvers text](gitlab-org/gitlab@47478e05bfcce81704b44c09a4ca1f67dca2dfe6) ([merge request](gitlab-org/gitlab!62657)) **GitLab Enterprise Edition**
- [Update securityReportSummary to avoid expensive operation](gitlab-org/gitlab@a796af895c2332a6f19f14048f356d394f2c4010) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61221)) **GitLab Enterprise Edition**
- [Redesign policy editor page](gitlab-org/gitlab@c81e65ff1e7a17946a4e4bc5688a975311e6ac67) ([merge request](gitlab-org/gitlab!62344)) **GitLab Enterprise Edition**
- [Enable builds queue on replicas by default](gitlab-org/gitlab@2a7b20d0911b8c7876f79047ddb9a98bb7abf0da) ([merge request](gitlab-org/gitlab!62619))
- [Update Unknown signin email timestamp to use 24 hour time](gitlab-org/gitlab@cc0a6c567bbaa677e64b2f98a67d303dfcd6539d) ([merge request](gitlab-org/gitlab!47748))
- [Move cluster management projects out of alpha](gitlab-org/gitlab@d4189c0846a401f3bb4c6bc9f25a66452f96306a) ([merge request](gitlab-org/gitlab!62255))
- [Update group creation UI](gitlab-org/gitlab@db58b29afcf18b46c5d844a1c086454e394d8079) ([merge request](gitlab-org/gitlab!61100))
- [Remove group timelog mandatory arguments](gitlab-org/gitlab@cfdedd479eeac7e319aabcf84635e248a518a2fc) ([merge request](gitlab-org/gitlab!61847))
- [Remove include_lfs_blobs_in_archive feature flag](gitlab-org/gitlab@c17834bb95399626e55a3b161e6bc0d9f019f84f) ([merge request](gitlab-org/gitlab!62539))
- [Add BulkImports NdjsonExtractor & update labels pipeline to use it](gitlab-org/gitlab@53ca7bd16d6f92610343d7da34e3f2f1a867dc1b) ([merge request](gitlab-org/gitlab!62409))
- [Remove @service from integrations contollers](gitlab-org/gitlab@3add719db257714bb462c580b7c83d89a20e7ad0) ([merge request](gitlab-org/gitlab!62551))
- [Allow url without .git suffix for import](gitlab-org/gitlab@b6981d9baaa8d5680cd7e5a267b8c1be84f22836) ([merge request](gitlab-org/gitlab!62552))
- [Enforce maximum attachment size in project API uploads by default](gitlab-org/gitlab@c8c13203828c8443487eb44f719856b6f12998e8) ([merge request](gitlab-org/gitlab!62542))
- [Added path navigation to project VSA](gitlab-org/gitlab@70abdb446166465578f8b90826ec3effab1d5949) ([merge request](gitlab-org/gitlab!61125)) **GitLab Enterprise Edition**
- [Enable builds queue limit by default](gitlab-org/gitlab@c853efd7f8f3813c318ef44beaa809a4ad12bf5c) ([merge request](gitlab-org/gitlab!62405))
- [Fix spacing for branch switcher in pipeline editor](gitlab-org/gitlab@ef1cbb855fa99d504f2ac954cfc5f083d89e9818) ([merge request](gitlab-org/gitlab!62534))
- [Updates authorization for lint](gitlab-org/gitlab@f8524e7f322db547e578b5c205252d97aa068db8) ([merge request](gitlab-org/gitlab!62004))
- [Separate adoption segment namespaces](gitlab-org/gitlab@212d28d988cbd9f8b6345236c77d2d49dad7cd28) ([merge request](gitlab-org/gitlab!61903))
- [Use :latest image tag in default Ruby CI template](gitlab-org/gitlab@58439fb1fa48fba378e86039a6b241f152cc7bd4) ([merge request](gitlab-org/gitlab!61283))
- [Globally enable better generic metrics comparison](gitlab-org/gitlab@d7c47fb1f98c27a064b662c6cee53aa40efcdeec) ([merge request](gitlab-org/gitlab!62335))
- [Upgrade CQ for updated Rubocop for Ruby 3](gitlab-org/gitlab@551f2cdd6ce94bd9b39f7afda4b57d1e8f1b278d) ([merge request](gitlab-org/gitlab!61833))
- [Remove Links header](gitlab-org/gitlab@47203a782e9f396add2f4c98e4dfc8c61b2a9a56) ([merge request](gitlab-org/gitlab!62388))
- [Reduce queries when ticking the runner queue by default](gitlab-org/gitlab@f4170c07a4c59fab0c0bf4cee9cc84721e2a04f2) ([merge request](gitlab-org/gitlab!62146))
- [Add codeowners to DevOps Adoption](gitlab-org/gitlab@c99eca0dfad287deee2c687266f930178cb32ebf) ([merge request](gitlab-org/gitlab!62072))
- [Prevent retried builds from being retried again](gitlab-org/gitlab@f932aea58ee5500651017ea40357d2779ca10ea8) ([merge request](gitlab-org/gitlab!62349))
- [Raise job rules without workflow warnings by default](gitlab-org/gitlab@bf779d0b1de98155c0472120db9e6ce967f23593) ([merge request](gitlab-org/gitlab!61945))
- [Better errors to users for CustomersDot API calls](gitlab-org/gitlab@48440e250df8edf3921b958069756fe9add4562b) ([merge request](gitlab-org/gitlab!62367))
- [Enable live consumption for all paid plans](gitlab-org/gitlab@acc183586a5eb8352e648540cfc78926872521a0) ([merge request](gitlab-org/gitlab!62178))
- [Remove webhooks_moved user callout](gitlab-org/gitlab@43a5b008f10481a807cbe84bf0e62490aedcfe56) ([merge request](gitlab-org/gitlab!61960))
- [Use new location for container-scanning analyzer](gitlab-org/gitlab@345978be218a53692196ee2adac531baf7a74363) ([merge request](gitlab-org/gitlab!62358))
- [Remove code owner ribbon move announcement from settings](gitlab-org/gitlab@b038f48d279a3640f5bdb38081c9212a5df498cf) ([merge request](gitlab-org/gitlab!62299))
- [Move gosec to alphabetical order](gitlab-org/gitlab@a08537d3bb3c530c51b27a625400d9df8f9a3865) ([merge request](gitlab-org/gitlab!62299))
- [Update Operations settings forms to be UX consistent](gitlab-org/gitlab@835bee362133230a73890d8c0e47daa94f85d3d1) ([merge request](gitlab-org/gitlab!62299))
- [Lock a newly created item card in boards](gitlab-org/gitlab@6fa9e817c5d6b4f45a71ea1f34aeab237035b6ca) ([merge request](gitlab-org/gitlab!62012))
- [Simplify error code handling for external pipeline validation](gitlab-org/gitlab@5a17b30dc1d5e50a01eda71bccd5aeeafc17c7c7) ([merge request](gitlab-org/gitlab!62012))
- [Backfill clusters_integration_prometheus.enabled](gitlab-org/gitlab@ccedc0a5f379bb5353ee950f1df251b564026070) ([merge request](gitlab-org/gitlab!62012))
- [Add ease score onboarding in-product marketing email](gitlab-org/gitlab@7e2699e16cb397b0e40a62af23c6ce460087530c) ([merge request](gitlab-org/gitlab!62012))
- [Allow issue type change for incidents](gitlab-org/gitlab@455192325b567617bf0bb5b809c1d23f6d7b7215) ([merge request](gitlab-org/gitlab!62012))
- [Observe secondary email addresses when adding a member](gitlab-org/gitlab@4b57957a23fbd72c812fbafc50abd567015cc583) ([merge request](gitlab-org/gitlab!62012))
- [Left-align certain application-wide cancel buttons to conform to the GitLab Pajamas style guide](gitlab-org/gitlab@ebf3df5f857dd5f0929ab1a110bc96f3f6db3286) ([merge request](gitlab-org/gitlab!62012))
- [Remove old redirect rule for the usage trends feature](gitlab-org/gitlab@2151cf64c3447a7e9f00c2cd5d394fb657395fff) ([merge request](gitlab-org/gitlab!62012))
- [Simplify error code handling for external pipeline validation](gitlab-org/gitlab@dd0cd8e32e3028276a994132c5840a0474dc6035) ([merge request](gitlab-org/gitlab!61190))
- [Set minimum Redis version to 5.0](gitlab-org/gitlab@2cfe54c0d75d4752978a2a2e20b8eb5ba8d59829) ([merge request](gitlab-org/gitlab!62156))
- [Observe secondary email addresses when adding a member](gitlab-org/gitlab@e77c72dcf38da384a73c47ebd6ce0e2d1b006f38) ([merge request](gitlab-org/gitlab!62024))
### Deprecated (3 changes)
- [Depreciate GMA from Logs view in Operations](gitlab-org/gitlab@71df6576657f8410fba8b4306eab5b15bbe87460) ([merge request](gitlab-org/gitlab!63517))
- [Deprecate related projects_with_prometheus_alerts metrics](gitlab-org/gitlab@c719c378dcf63da7b8bb9c5be0869b64537ee868) ([merge request](gitlab-org/gitlab!61872))
- [Remove OpenJDK-alpine Dockerfile template](gitlab-org/gitlab@8891a02665a0f316faefe802702f717fb0d4521f) ([merge request](gitlab-org/gitlab!61867))
### Removed (46 changes)
- [Remove metrics dashboard alert functionality](gitlab-org/gitlab@820924deb74368dd6263ddc4dcaa462b001acba9) ([merge request](gitlab-org/gitlab!63838))
- [Remove load_balancing_for_web_hook_worker FF](gitlab-org/gitlab@8608f495de805f392e474334b0f108b3cab92bbf) ([merge request](gitlab-org/gitlab!63988))
- [Drop license_management artifact](gitlab-org/gitlab@f385377cf38d187f138885af984a7d66f3628e0f) ([merge request](gitlab-org/gitlab!62302)) **GitLab Enterprise Edition**
- [Remove ssh_key_expiration_email_notification feature flag](gitlab-org/gitlab@35bc6dd82316fd03a46dfe42b85c6d890a5339b2) ([merge request](gitlab-org/gitlab!63877))
- [Remove support for creating/updating release notes via tags API](gitlab-org/gitlab@9bda56ad634f5088d2bbac2ad45420d7699fd4e1) ([merge request](gitlab-org/gitlab!63389))
- [Drop support of legacy feature flag](gitlab-org/gitlab@d416cf01f4cd5c5ae3eaa853b9cfdc64db3ada5b) ([merge request](gitlab-org/gitlab!63614))
- [Removes SAST_DEFAULT_ANALYZERS variable](gitlab-org/gitlab@aa31a30ac3b454b7d3723b71ef2b09a02768f324) ([merge request](gitlab-org/gitlab!63538))
- [Replace 'tag_list' with 'topic_list' attribute on project](gitlab-org/gitlab@2ff0b5e350ff77e0122adbe2b462636382828a86) ([merge request](gitlab-org/gitlab!63493))
- [Don't take fingerprints for the internal authorized_keys API](gitlab-org/gitlab@afeaa2e772e63b03ab235fed0f2abad9d5dbe014) ([merge request](gitlab-org/gitlab!63783))
- [Remove redundant key/value pair from the payload of DORA metrics API](gitlab-org/gitlab@9064c0fbbe7caaceb22fc3ac2ae394822094cb6a) ([merge request](gitlab-org/gitlab!62875))
- [Remove canary_ingress_weight_control feature flag](gitlab-org/gitlab@1b29140c696f1c3ba6d69031963069f092df9725) ([merge request](gitlab-org/gitlab!63710))
- [Remove allow_group_deploy_token feature flag](gitlab-org/gitlab@0317654a7b106644439ac5bc6f971f63ba4cfe09) ([merge request](gitlab-org/gitlab!63727))
- [Remove GitLab-managed applications UI](gitlab-org/gitlab@f770bce42385999dc5cfecd69a490911dacfc411) ([merge request](gitlab-org/gitlab!63348))
- [Remove GMAv1 Fluentd](gitlab-org/gitlab@2a21bfcda7f0d9c67529559f4c27395c4954f67d) ([merge request](gitlab-org/gitlab!63755))
- [Remove GraphQL deprecated fields](gitlab-org/gitlab@89009fc7e7c4830dbebec7ccd911fb4fcee17722) ([merge request](gitlab-org/gitlab!63293))
- [Remove GitLab WAF related models, services and workers](gitlab-org/gitlab@d1146081367b992ff33f9956ea32c7306cab900a) ([merge request](gitlab-org/gitlab!61556)) **GitLab Enterprise Edition**
- [Remove legacy profile routes](gitlab-org/gitlab@d7efa70a41956fcf8d13ce6079ac96b3f7efee31) ([merge request](gitlab-org/gitlab!63566))
- [Replace 'tags' with 'topics' association on project](gitlab-org/gitlab@784c5dabe6cbb2393a306b1331d4e648631f005b) ([merge request](gitlab-org/gitlab!62549))
- [Remove deprecated CI workers and arguments](gitlab-org/gitlab@5e2dbc0e2dc51e190fb04b3ad01ef056622ae2e3) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63323))
- [Deprecate global usage of SAST_ANALYZER_IMAGE_TAG](gitlab-org/gitlab@422219bae6a101258826f96deca431072621f124) ([merge request](gitlab-org/gitlab!62724))
- [Remove BuildsEmailService records from services](gitlab-org/gitlab@272464a44b95f0f8edb25c01aa91a1e0b80a6431) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63264))
- [Remove metrics for Web Application Firewall](gitlab-org/gitlab@d4c579847bfe75192270be221bbce169956fb809) ([merge request](gitlab-org/gitlab!61448))
- [Remove documentation for GitLab WAF](gitlab-org/gitlab@e5a771237f211bc339d663e1d94d1a4be6d6766c) ([merge request](gitlab-org/gitlab!61441))
- [Remove Unicorn support](gitlab-org/gitlab@e2fc284cc73dea159baacb38d655d8d6e2fc3530) ([merge request](gitlab-org/gitlab!61888))
- [Remove projects_with_prometheus_alerts and pod_logs_usages_total metrics](gitlab-org/gitlab@c90a373081c379b66ec1465ec62900280bd529e9) ([merge request](gitlab-org/gitlab!62962))
- [Remove code coverage tracking feature flag](gitlab-org/gitlab@757dd33a6303d33061975e8513286192636144e4) ([merge request](gitlab-org/gitlab!62595))
- [Remove pick_into_project feature flag](gitlab-org/gitlab@0ac685ba56d3367ff23c08a84c9647acfa6e0f20) ([merge request](gitlab-org/gitlab!62809))
- [Remove postgres hll batch counting ff](gitlab-org/gitlab@38f718f80b9257ce39f67e8649dfc063ac3e9101) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62813))
- [Remove `trace` parameter from `PUT /api/jobs/:id`](gitlab-org/gitlab@4c8900c0417cec10ccbb9cdc6c0bc91ad9d74537) ([merge request](gitlab-org/gitlab!62758))
- [Remove CI_PROJECT_CONFIG_PATH variable](gitlab-org/gitlab@984218929c9c17f48b1b6ce44c57a826c40dba5d) ([merge request](gitlab-org/gitlab!61977))
- [Remove inherited_issuable_templates feature flag](gitlab-org/gitlab@f424d6e6f70dbf35fd3088c4937205f771d062d3) ([merge request](gitlab-org/gitlab!56747))
- [Remove deprecated `--experimental-queue-selector` flag for Sidekiq](gitlab-org/gitlab@f0dcc2d13e8271cfcc23265ac488e8b946ff7dac) ([merge request](gitlab-org/gitlab!62697))
- [Remove unused instance statistics workers](gitlab-org/gitlab@d07788c23502f53fe22dd2a7d0a6546181dc13a7) ([merge request](gitlab-org/gitlab!62583))
- [Remove Unicorn references from runtime logic](gitlab-org/gitlab@8c0ccaec331c0c8f9cea0ff11cf16ba6244281b6) ([merge request](gitlab-org/gitlab!62390))
- [Remove unicorn-worker-killer gem and relations](gitlab-org/gitlab@fdc7dad54ac3f5cdbb7ce93ac9b391bd2a065a02) ([merge request](gitlab-org/gitlab!62293))
- [Remove Unicorn detection in pid provider](gitlab-org/gitlab@6d875648769b638a1117617d7929b2ac21bbc9e3) ([merge request](gitlab-org/gitlab!62377))
- [Remove assigned open issue count background worker](gitlab-org/gitlab@0ac4bc765a2cd35dd0062899b536a1a166a350bf) ([merge request](gitlab-org/gitlab!62370))
- [Remove start-up scripts for Unicorn web server](gitlab-org/gitlab@74b58f507f910169e742a17b229547837975ad5e) ([merge request](gitlab-org/gitlab!62289))
- [Remove UnicornCheck service](gitlab-org/gitlab@83d53d02cf77cfd8ec26b30d389103d148dbd196) ([merge request](gitlab-org/gitlab!62012))
- [Remove support for /wip quick action](gitlab-org/gitlab@1842425ba033bb420e58a66aba40436800440cdc) ([merge request](gitlab-org/gitlab!62012))
- [Redirect some of deprecated repository routes](gitlab-org/gitlab@942adb32b60ac9329c061e34e9094cdf972bc19f) ([merge request](gitlab-org/gitlab!62012))
- [Remove some deprecated global routes](gitlab-org/gitlab@924890e647040a7dde8e200d9056edd38b90cfaa) ([merge request](gitlab-org/gitlab!62012))
- [Remove Unicorn Sampler](gitlab-org/gitlab@311703895118692216ad14af4ddf100c4d41f48b) ([merge request](gitlab-org/gitlab!62012))
- [Drop plugins directory support](gitlab-org/gitlab@dc87151f9f2ea5e3d3e307f361da4db3db406876) ([merge request](gitlab-org/gitlab!62012))
- [Remove UnicornCheck service](gitlab-org/gitlab@6cc7c1c91dafd3d2830406e99da5c8eb778db48a) ([merge request](gitlab-org/gitlab!62204))
- [Remove Unicorn Sampler and its dependencies](gitlab-org/gitlab@b30ae67d140973dcee5d292c13119d82f80182ad) ([merge request](gitlab-org/gitlab!62090))
### Security (12 changes)
- [Change button type so the form doesn't submit](gitlab-org/gitlab@9f96385312400a270d1b09f53b3a4e286505102a) ([merge request](gitlab-org/gitlab!63895))
- [Bump BinData version](gitlab-org/gitlab@49f41ecab3cfc8dc54dda314a440630726455828)
- [Use xpath search of Nokogiri instead of css search](gitlab-org/gitlab@66c21aca75fec6c8f9454f1b6fdda52c44e90db1)
- [Truncate all non-blob markdown to 1MB by default](gitlab-org/gitlab@de3ea3cb762bb8d08d4419e048a171b4719aaf5e)
- [Block access to GitLab for users with expired password](gitlab-org/gitlab@9abcdb766a3098f4191aab125ddfc04eea40ab44)
- [Adds redirect page to OAuth](gitlab-org/gitlab@5d9a9224b590fb2f77ae3fe78370ca982578d22b)
- [Opt in to Atlassians new context qsh](gitlab-org/gitlab@bd02953c891398513e69de00186b010a81f88f80)
- [Limit oncall projects shown to scope of source](gitlab-org/gitlab@bf65867e699a43fcf41661c554bd40fafdff3482) **GitLab Enterprise Edition**
- [Merge branch 'id-upgrade-rails-to-6.0.3.7' into 'master'](gitlab-org/gitlab@0d8d8c7ad7590b4c95ef89e3fd1ec43f89292372) ([merge request](gitlab-org/gitlab!62347))
- [Update users two factor required from group](gitlab-org/gitlab@b9a6117b87fdbff54999a2282f41b8f27d1cea7d)
- [Only verify commit signatures if the user email is verified](gitlab-org/gitlab@fe21bb58c79be0128530b02ef1db25ce3ea183ff)
- [Prevent XSS on notebooks](gitlab-org/gitlab@1f23ad420d1c1853eb03722cd183758f749a375f)
### Performance (45 changes)
- [Add post deployment migration for cleanup policies](gitlab-org/gitlab@00dca6deae3d6159763d296af55a8e32e786d4b2) ([merge request](gitlab-org/gitlab!63841))
- [Enable caching of PG typemap by default](gitlab-org/gitlab@ea9ae9731df199387d7d7a7abbc5072456afb462) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64010))
- [Paginate diffs using Gitaly paths](gitlab-org/gitlab@b6e206b0ff7410abc28171aa0c53c80fd6acd1c3) ([merge request](gitlab-org/gitlab!62543))
- [Prevent refetching commit data](gitlab-org/gitlab@4829a69f027d0a5f68cd9b34194f066ebf86c4a2) ([merge request](gitlab-org/gitlab!63870))
- [Use title, not full_title for commit mentionables](gitlab-org/gitlab@d33a225801f62cf4d8ae39bed7fe718a9a542fdd) ([merge request](gitlab-org/gitlab!63869))
- [Add index for project_features.container_registry_access_level](gitlab-org/gitlab@78c5f2b321f4861a13e0cd8a2faed0dce7c348a3) ([merge request](gitlab-org/gitlab!55071))
- [Reduce number of gitaly calls in Snippet REST list Endpoints](gitlab-org/gitlab@913e8982efad68d4e759a4b1fa2176269e54904a) ([merge request](gitlab-org/gitlab!63735))
- [Improve cache sharing between cached markdown fields and mentionables](gitlab-org/gitlab@c0e6dd6af5e675c46d1eaf852123a5f8650c4877) ([merge request](gitlab-org/gitlab!63040))
- [Add protected pending build column and migrate data](gitlab-org/gitlab@8498d1089d98949716ac9cac21d64a5cf58ad7fb) ([merge request](gitlab-org/gitlab!63759))
- [Prevent fetching commits for next page](gitlab-org/gitlab@ce8bba1418be55e2b01186d0e1101f0c94f02dc7) ([merge request](gitlab-org/gitlab!63525))
- [Retry traversal_ids backfill jobs](gitlab-org/gitlab@a356b0ef27341ef89626bdf54bb783aa299920b4) ([merge request](gitlab-org/gitlab!62992))
- [Enable label reference caching](gitlab-org/gitlab@d21e5bcaad2bef045af250e80230942bde3c78a7) ([merge request](gitlab-org/gitlab!61648))
- [chore: Drop optimize_sql_query_for_security_report feature flag](gitlab-org/gitlab@d5e3be8a7be1f19e926a0faadad6365c1acfa1ea) ([merge request](gitlab-org/gitlab!63558)) **GitLab Enterprise Edition**
- [Add tracking of running shared runner builds](gitlab-org/gitlab@7204a4815b7b2d3e3041da7c0e32180b806c6a9d) ([merge request](gitlab-org/gitlab!62912))
- [Use specialized project_authorization workers](gitlab-org/gitlab@652c1ee874a8a699e3fd651fa3db1cc1cdc5f6c5) ([merge request](gitlab-org/gitlab!63637))
- [Enable 'use_distinct_in_shas_cte' FF by default](gitlab-org/gitlab@425bec5bc5b72c8d47eb1c99a60f55586953c864) ([merge request](gitlab-org/gitlab!63532))
- [Add background migration for unused expiration policies](gitlab-org/gitlab@eda4d6c1da822cc2120187ec1fd1c9bb301f59b5) ([merge request](gitlab-org/gitlab!61983))
- [Fix N+1 problem for fork controller](gitlab-org/gitlab@945abee15a2aca596f84e2ca48966d4df7c164e1) ([merge request](gitlab-org/gitlab!63436))
- [Preload blobs in repo view](gitlab-org/gitlab@b37b804c3fb448f4d68eb5798a2c212eb2542ea5) ([merge request](gitlab-org/gitlab!63066))
- [Utilize load balancing capabilities for UserRefreshOverUserRangeWorker](gitlab-org/gitlab@dd5830e7676bf5ee86d4cbd2777607f6811be842) ([merge request](gitlab-org/gitlab!63280))
- [Optimize queries that timeout in StuckCiJobsWorker](gitlab-org/gitlab@314b7edb776a04e66404dc94849733f6f7777184) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62239))
- [Linear traversal query for Namespace#root_ancestor](gitlab-org/gitlab@fdf3d7f90ca040c3c41f8a1556387e5fc807411f) ([merge request](gitlab-org/gitlab!61799))
- [Cache open epics count in group sidebar](gitlab-org/gitlab@b763267d9ee39a851742218f188611a5e3b16a1e) ([merge request](gitlab-org/gitlab!62940)) **GitLab Enterprise Edition**
- [Cache sidebar merge requests count at group level](gitlab-org/gitlab@e57650e49ce6a63a2f792b5188432684c8e7bc27) ([merge request](gitlab-org/gitlab!62935))
- [Moves the pipelines.json endpoint to startup js](gitlab-org/gitlab@8d74b69a7ff174ea5b6343ef23e387b0da1f612d) ([merge request](gitlab-org/gitlab!62936))
- [Remove unreferenced lfs objects in batches](gitlab-org/gitlab@0b75859dedbee28bd0118f3354702b2555f199d7) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56959))
- [Remove preloading of forks in projects API](gitlab-org/gitlab@2a3be447556fd31f32b024bfb72540216926f793) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62602))
- [Enable pending builds parity by default](gitlab-org/gitlab@0b4c7bb40cb554702e6289101a1b6372c1d11c40) ([merge request](gitlab-org/gitlab!62195))
- [Refine linear queries in Namespace#all_projects](gitlab-org/gitlab@e254445f21f25bc6ad491211ab0a079c1380e1dc) ([merge request](gitlab-org/gitlab!62268))
- [Reinstate branches keyset pagination](gitlab-org/gitlab@a4bdb63bc00d90fed4dec1f3fe3ea91b4d35151e) ([merge request](gitlab-org/gitlab!62458))
- [Optimize Nokogiri search for post-processing pipeline](gitlab-org/gitlab@567685431f4f18ebc52ee6a1865b545addaa1b85) ([merge request](gitlab-org/gitlab!61994))
- [Removes unneeded preloading in Markdown rendering](gitlab-org/gitlab@c264427ea396ec74fcc989f88e1377c5ef76da79) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62273))
- [Cache `branch_requires_code_owner_approval?`](gitlab-org/gitlab@0459ed2681f990f379ee7e8ced6d07dbf9635f16) ([merge request](gitlab-org/gitlab!56775)) **GitLab Enterprise Edition**
- [Switch group member max access to use bulk load](gitlab-org/gitlab@daa4c18ec4d53863ccdf3263037e34c86b6774de) ([merge request](gitlab-org/gitlab!62226))
- [Utilize load balancing capabilities for BuildHooksWorker](gitlab-org/gitlab@c8d86d0fc29c5b60e206240c6020d3609f57fd4f) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61905))
- [Add viewer URL to StartupJS](gitlab-org/gitlab@1533d9ec085d503cac5229ebc1ac70babe6c006c) ([merge request](gitlab-org/gitlab!62068))
- [Advanced Search: Allow indexing workers to use replicas](gitlab-org/gitlab@7bc460926a334cda4f4ba4e0248d3647fd24aea8) ([merge request](gitlab-org/gitlab!62299))
- [Reduce memory consumption when an API exception goes to Sentry](gitlab-org/gitlab@1562bac71e71a316244bd762169267b3c6af04c2) ([merge request](gitlab-org/gitlab!62025))
- [Use cache for CI::Build runners check](gitlab-org/gitlab@7c8637c8059d95b9f4b7c3f4e3d64b652c22ecc2) ([merge request](gitlab-org/gitlab!62012))
- [Optimize query for loading artifacts in pipeline](gitlab-org/gitlab@2671124156243942eaab27283ca945896e9ea628) ([merge request](gitlab-org/gitlab!62012))
- [Accelerate builds queuing using a denormalized accelerated table](gitlab-org/gitlab@f4897e038ab01c3ab4f8bd7a30ea85e66837e92c) ([merge request](gitlab-org/gitlab!62012))
- [Remove the redundant update for API endpoint projects/:id/statuses/:sha](gitlab-org/gitlab@956958f2f08744bfedc5069196d772b2fdd3a88b) ([merge request](gitlab-org/gitlab!62012))
- [Contributes to https://gitlab.com/gitlab-org/gitlab/-/issues/325744](gitlab-org/gitlab@c1ba906d216942ce3df70bb3839787bab2954c85) ([merge request](gitlab-org/gitlab!62012))
- [Optimize query for loading artifacts in pipeline](gitlab-org/gitlab@e386fabed47af310f01f836e3f5ee666e61b3c9a) ([merge request](gitlab-org/gitlab!62249))
- [Remove feature flag for "runners_cached_states"](gitlab-org/gitlab@1ebf16062a5cf38e95cacb6451f56f6632c193e5) ([merge request](gitlab-org/gitlab!61998))
### Other (70 changes)
- [Update alert markup in runners page](gitlab-org/gitlab@3ca125ad4c1f216962664c86ae36345827978ccb) ([merge request](gitlab-org/gitlab!63157))
- [Use a new worker in lieu of UserRefreshWithLowUrgencyWorker as safeguard](gitlab-org/gitlab@f444387bc814b9775a89d08cc2c0c6da0ad5aadd) ([merge request](gitlab-org/gitlab!63840))
- [Update test_file_finder and Faraday](gitlab-org/gitlab@7cb2ad42696c1e560f884653e0aa7c5a24cfd51b) ([merge request](gitlab-org/gitlab!64017))
- [Remove notification_setting_recipient_refactor feature flag](gitlab-org/gitlab@379621f6c3fb1251142d0705becff156b4adb8d6) ([merge request](gitlab-org/gitlab!63827))
- [Add Atlassian referrer to Jira links inside GitLab](gitlab-org/gitlab@cb4de493193d3bde64463ce442f3f6f337a27646) ([merge request](gitlab-org/gitlab!63900))
- [Use the parent element to find elements to remove the child](gitlab-org/gitlab@1caa71c02bf05f460e2fe26936308985b0b29f5f) ([merge request](gitlab-org/gitlab!63935)) **GitLab Enterprise Edition**
- [Remove ci_dynamic_child_pipeline feature flag](gitlab-org/gitlab@e7a278c333711af786422fc346ec8a2cdd888e5a) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63329))
- [Add tracking for epic boards](gitlab-org/gitlab@650f6fb2fbc6bcf6dd6b3da8b11a29448fd4cd53) ([merge request](gitlab-org/gitlab!63765))
- [Remove feature flag release_mr_issue_urls](gitlab-org/gitlab@4adabdc079d05f712bc19bbd4bf97abc36cf518e) ([merge request](gitlab-org/gitlab!63609))
- [Standardize on roles term in UI](gitlab-org/gitlab@bab23d2b01ffcb649f832d7248b62a5ea2411516) ([merge request](gitlab-org/gitlab!63274))
- [Add unique index on configuration for batched_background_migrations](gitlab-org/gitlab@73539f28f865186d8d2c49ad0a415bedac4b09d0) ([merge request](gitlab-org/gitlab!63599))
- [Drop the web_hook_logs_archived table](gitlab-org/gitlab@1f663175e50e935b33dd7b932bca66f05ed6eaab) ([merge request](gitlab-org/gitlab!63649))
- [Bump gitlab-fog-azure-rm version to 1.1.1](gitlab-org/gitlab@4d45433e891ea8105696e57f7f825797412e83f9) ([merge request](gitlab-org/gitlab!63633))
- [Remove the nuget new file reader feature flag](gitlab-org/gitlab@0e7d5ae033cdd0ce63fbd9ab4d7b42490657ea46) ([merge request](gitlab-org/gitlab!63622))
- [Clenup deployments_finder_implicitly_enforce_ordering feature flag](gitlab-org/gitlab@7b8046ec8ff8e323e9d575599915b8bdbb410b9c) ([merge request](gitlab-org/gitlab!63617))
- [Extract CSS from user calendar JS](gitlab-org/gitlab@1e949ba57556dda6acdc933dbe17d86ac64cf005) ([merge request](gitlab-org/gitlab!62677))
- [Add data migration to update draft on merge_requests](gitlab-org/gitlab@590f680b1b64d1a35cf9572fcb17b4a042fac68f) ([merge request](gitlab-org/gitlab!62627))
- [Prepare ci_stages for bigint conversion](gitlab-org/gitlab@38a1cab9b2205fb0ab1d1bb716be45749e544617) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63488))
- [Add source tracking to invites](gitlab-org/gitlab@3256a37101b5e2518e8cced3cfe54cf5ed553dca) ([merge request](gitlab-org/gitlab!62609))
- [Track the validation error on Environment Update](gitlab-org/gitlab@15998eb46518b7b958b1f8f8c76ed92d8e984075) ([merge request](gitlab-org/gitlab!63398))
- [Enable by default Allow force push option to Protected branches](gitlab-org/gitlab@2ebd2d0ada9da16db6f3f88acfa02b337839c022) ([merge request](gitlab-org/gitlab!62572))
- [Update GitLab Shell to v13.19.0](gitlab-org/gitlab@1d518202c7832567b17501cd3c4d3cf568b66b1c) ([merge request](gitlab-org/gitlab!63298))
- [Add the origin of squash merge feature to the docs](gitlab-org/gitlab@456b263e9ea75ddbf397cce85c0dffc426b58cc9) ([merge request](gitlab-org/gitlab!63171))
- [Ensure delay for all UserRefreshOverUserRangeWorker jobs enqueued](gitlab-org/gitlab@9f148b15cd01146ee4185df4a038848ad3f3e32f) ([merge request](gitlab-org/gitlab!63026))
- [Rename DevOpsAdoptionSegment](gitlab-org/gitlab@60e3a87963a8566f5e65716455d9caa803d00a95) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62834)) **GitLab Enterprise Edition**
- [Prepare geo_job_artifact_deleted_events table](gitlab-org/gitlab@e046d93c752edf0f5454325908183796e50544bd) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62463))
- [Prepare deployments table for bigint conversion](gitlab-org/gitlab@f54f4c1f917484d89edc9f215c420cb421b63887) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62459))
- [Remove database_sourced_aggregated_metrics FF](gitlab-org/gitlab@114834811bab4fb7de71d8dc472a86cd6a7ece15) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62877))
- [Document and lint that trailers are case-sensitive](gitlab-org/gitlab@878c3d43ec2562f4cb17ea1962fa723d188cec37) ([merge request](gitlab-org/gitlab!62915))
- [Change JiraTrackerData#deployment_type based on URL](gitlab-org/gitlab@79e5264146efd2e87f26c9e831cee15696b0dc29) ([merge request](gitlab-org/gitlab!59902))
- [Group-level Protected Environment Alpha Version](gitlab-org/gitlab@80c49f4fcb4c2f6c78888b1c711a52e25d870e1f) ([merge request](gitlab-org/gitlab!61575))
- [Upgrade Puma to 5.3.2](gitlab-org/gitlab@57e6295b7e99080da4f703df61df88de03007b7c) ([merge request](gitlab-org/gitlab!62607))
- [Add subgroups and user namespaces spec examples](gitlab-org/gitlab@969380e734ce4bc04b21bea0d71789754b635e90) ([merge request](gitlab-org/gitlab!61477))
- [Add default value for merge_requests_author_approval](gitlab-org/gitlab@c7303b1aa99ad71798f38b0c217afb264e25c730) ([merge request](gitlab-org/gitlab!61949))
- [Place multiselect drag drop behind a feature flag](gitlab-org/gitlab@cba9f264fd5859f1ed6710340faae63d79f2f65c) ([merge request](gitlab-org/gitlab!61955))
- [Remove obsolete Segment selections table](gitlab-org/gitlab@a1df23f900bc6f96770ffeecabb11a48e0a9c798) ([merge request](gitlab-org/gitlab!62594))
- [Explicitly destroy webhooks and logs before the project deletion](gitlab-org/gitlab@e6f828fc380d450bee65e6615b00ffc58837c071) ([merge request](gitlab-org/gitlab!61995))
- [Remove :find_remote_root_refs_inmemory feature flag](gitlab-org/gitlab@cf786e6372e54bd8d7e8309b49846608fc591109) ([merge request](gitlab-org/gitlab!62501))
- [Reschedules migration for uuid recalculation](gitlab-org/gitlab@bc61d908069c93ef26e8b37467c03844215f3446) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60540))
- [Cleanup container_registry_enabled background migration](gitlab-org/gitlab@77892b2a6e3d1901ac1b773649efde9b202b78c8) ([merge request](gitlab-org/gitlab!56626))
- [Update managed cluster template to avoid hardcoded master](gitlab-org/gitlab@ffce5b3aa0221809428f0c9368d4f3379f232ec8) ([merge request](gitlab-org/gitlab!62277))
- [Prepare ci_builds_metadata for int8 migration](gitlab-org/gitlab@ab5226343130bc25769f9ebc6951d1f3fd37d1fd) ([merge request](gitlab-org/gitlab!62102))
- [Remove the usage of `limit_projects_in_groups_api ` feature flag](gitlab-org/gitlab@93394180e0a7292fbb3081c0dd72c0fe1e8e3dbd) ([merge request](gitlab-org/gitlab!62454))
- [Remove the check_maven_path_first feature flag](gitlab-org/gitlab@abee680a8e72c67c12b0e26ed8e85916d872665f) ([merge request](gitlab-org/gitlab!62187))
- [Prepare taggings table for bigint conversion](gitlab-org/gitlab@4bcbf379291247f89e6583cbc439cf1ca7d7e1c9) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62205))
- [Update ffi from 1.13.1 to 1.15.1](gitlab-org/gitlab@6ed4cd0b1f4c6ca099a74f7fa3ac4df1ec184760) ([merge request](gitlab-org/gitlab!62207))
- [Remove DAST site profile related feature flags](gitlab-org/gitlab@255bae2bb92fc3a743adf518e8850fdf1283ae94) ([merge request](gitlab-org/gitlab!61460)) **GitLab Enterprise Edition**
- [Remove the FF *_unique_users_pushing_mr_ciconfigfile](gitlab-org/gitlab@35e5175f877d794455520f524b35fbf92189f17f) ([merge request](gitlab-org/gitlab!62283))
- [Remove the FF ci_needs_optional](gitlab-org/gitlab@d0c8120abb9cca60a05ce40057a6edaea063a0df) ([merge request](gitlab-org/gitlab!62282))
- [Remove the FF usage_data_unique_users_committing_ciconfigfile](gitlab-org/gitlab@6d860a60564afb669c9142df807bc11189ccd277) ([merge request](gitlab-org/gitlab!62284))
- [Remove delayed_perform_for_build_hooks_worker feature flag](gitlab-org/gitlab@fab6b3a8bdc0661ee4ea4e9f1f423b675bb75c3a) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62196))
- [Update GitLab Runner Helm Chart to 0.29.0](gitlab-org/gitlab@08381980f543cc8eb21534bd59f3d97f9c5f92c4) ([merge request](gitlab-org/gitlab!62217))
- [Remove threat_monitoring_alerts feature flag](gitlab-org/gitlab@6ee8b88b30f264cb4f75c09c90571588b19291b2) ([merge request](gitlab-org/gitlab!62299))
- [VSA: Add decimal places to metrics](gitlab-org/gitlab@6eb9cf8f2ca5280a83ca0124590ec4fe287617ba) ([merge request](gitlab-org/gitlab!62299))
- [Prepare ci_build_trace_sections for int8 migration](gitlab-org/gitlab@b4482857e765132febaa93258f55ac6b8f5ce3e5) ([merge request](gitlab-org/gitlab!62012))
- [Update button variants and alignment to align with the Pajamas Design System...](gitlab-org/gitlab@0907700a8129a4f98ecee22954ecd564d137a40c) ([merge request](gitlab-org/gitlab!62012))
- [Removed packages_finder_helper_deploy_token feature flag](gitlab-org/gitlab@9d4f5d6071743daaa53430c769b9f79d0d80f2dd) ([merge request](gitlab-org/gitlab!62012))
- [Update group/project member tabs to comply with Pajamas design system](gitlab-org/gitlab@df2c797d50879b365c7a2f790e3b2c9beb3119d1) ([merge request](gitlab-org/gitlab!62012))
- [Merge Request edit: make breadcrumbs consistent](gitlab-org/gitlab@50c75b71f421f90e0e4420ccd4f32e5f7c04019b) ([merge request](gitlab-org/gitlab!62012))
- [Remove the feature flag for the external validation service](gitlab-org/gitlab@7302385e07859b891c24de3aeb08ba2e4b204c26) ([merge request](gitlab-org/gitlab!62012))
- [Add options events to Redis HLL metrics for filtering data](gitlab-org/gitlab@b058b5bc9c07a66d4fce1a2685139b4b8aa94629) ([merge request](gitlab-org/gitlab!62012))
- [Track usage of the resolve conflict UI](gitlab-org/gitlab@b0a07cac324c2cdbbfcf98dd012f11e1cd838822) ([merge request](gitlab-org/gitlab!62012))
- [Remove the packages_finder_helper_deploy_token feature flag](gitlab-org/gitlab@cb4c3fa0deaebd033055fbaef6037717f5704eed) ([merge request](gitlab-org/gitlab!62189))
- [Prepare ci_build_trace_sections for int8 migration](gitlab-org/gitlab@12af7f89b18269b3097c8abb1460082c25b28cbd) ([merge request](gitlab-org/gitlab!62098))
- [Use @gitlab/ui color in member badges](gitlab-org/gitlab@9fc07a7c82354288b2934299f4215716ceabd540) ([merge request](gitlab-org/gitlab!62182))
- [Remove the feature flag for the external validation service](gitlab-org/gitlab@de79da2a2ec759db01b9809dd05190d973ced7e7) ([merge request](gitlab-org/gitlab!61351))
- [Update http-parser from 1.2.1 to 1.2.3](gitlab-org/gitlab@03ea5c828ce1625c6b744301ed1b236feb531cf5) ([merge request](gitlab-org/gitlab!62060))
- [Track usage of the resolve UI](gitlab-org/gitlab@83519fa35b9b2ab17dbd181a1786be8e78d3efb1) ([merge request](gitlab-org/gitlab!61654))
- [Add missing metrics information](gitlab-org/gitlab@89cd7fe3b95323e635b2d73e08549b2e6153dc4d) ([merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61772/edit))
- [Track usage of the resolve UI](gitlab-org/gitlab@35c8e30fce288cecefcf2f7c0077d4608e696519) ([merge request](gitlab-org/gitlab!61654))
## 13.12.4 (2021-06-14) ## 13.12.4 (2021-06-14)
@ -96,22 +793,6 @@ entry.
- [Improve SSH key expiration warning emails](gitlab-org/gitlab@2e3929503046ab1da5635ef295321ce08843f937) ([merge request](gitlab-org/gitlab!63393)) - [Improve SSH key expiration warning emails](gitlab-org/gitlab@2e3929503046ab1da5635ef295321ce08843f937) ([merge request](gitlab-org/gitlab!63393))
## 13.12.2 (2021-06-01)
### Security (11 changes)
- [Bump BinData version](gitlab-org/security/gitlab@609303ac4904cad6bbcc776bb809a46a66891d53) ([merge request](gitlab-org/security/gitlab!1414))
- [Block access to GitLab for users with expired password](gitlab-org/security/gitlab@f0a07ce8a596a4dd6f1311dff893c896b0cdf82f) ([merge request](gitlab-org/security/gitlab!1446))
- [Adds redirect page to OAuth](gitlab-org/security/gitlab@6ed6dfc8f9ba785fd5337ee0f4701c983b6f07b0) ([merge request](gitlab-org/security/gitlab!1441))
- [Update users two factor required from group](gitlab-org/security/gitlab@8c3fe378289d2dced2139c9db396b6270d3bc0ab) ([merge request](gitlab-org/security/gitlab!1432))
- [Updates authorization for lint](gitlab-org/security/gitlab@be33caed9684af07ac715038d7a2865d9d0c7247) ([merge request](gitlab-org/security/gitlab!1429))
- [Opt in to Atlassians new context qsh](gitlab-org/security/gitlab@f1d06250fbef6fa2af8a8c88d3b3f9391c332089) ([merge request](gitlab-org/security/gitlab!1408))
- [Limit oncall projects shown to scope of source](gitlab-org/security/gitlab@a70859aaac44c9b3bd3cc673737e01e2a3aba99c) ([merge request](gitlab-org/security/gitlab!1410)) **GitLab Enterprise Edition**
- [Only verify commit signatures if the user email is verified](gitlab-org/security/gitlab@9039fdffdf109cdf667be8db3d792a502aad8bb9) ([merge request](gitlab-org/security/gitlab!1385))
- [Prevent XSS on notebooks](gitlab-org/security/gitlab@9a2dc30920c2a271257ccec92aebcfabec276096) ([merge request](gitlab-org/security/gitlab!1421))
- [Truncate all non-blob markdown to 1MB by default](gitlab-org/security/gitlab@e9e6bc0450639ee25fd0ced983da231700a4d4f9) ([merge request](gitlab-org/security/gitlab!1420))
- [Use xpath search of Nokogiri instead of css search](gitlab-org/security/gitlab@7e5c79021ab54ffc70d22bba3c663ce38ae83a88) ([merge request](gitlab-org/security/gitlab!1416))
## 13.12.1 (2021-05-25) ## 13.12.1 (2021-05-25)
### Fixed (3 changes) ### Fixed (3 changes)

View file

@ -1 +1 @@
13.12.9 14.0.10

View file

@ -1 +1 @@
2.11.0 2.12.0

View file

@ -1 +1 @@
13.12.0 14.0.1

View file

@ -1 +1 @@
1.39.0 1.40.0

View file

@ -1 +1 @@
13.18.1 13.19.1

44
Gemfile
View file

@ -2,7 +2,7 @@
source 'https://rubygems.org' source 'https://rubygems.org'
gem 'rails', '~> 6.0.3.7' gem 'rails', '~> 6.1.3.2'
gem 'bootsnap', '~> 1.4.6' gem 'bootsnap', '~> 1.4.6'
@ -101,7 +101,7 @@ gem 'graphql', '~> 1.11.8'
# TODO: remove app/views/graphiql/rails/editors/show.html.erb when https://github.com/rmosolgo/graphiql-rails/pull/71 is released: # 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 # https://gitlab.com/gitlab-org/gitlab/issues/31747
gem 'graphiql-rails', '~> 1.4.10' gem 'graphiql-rails', '~> 1.4.10'
gem 'apollo_upload_server', '~> 2.0.2' 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)
@ -129,7 +129,7 @@ gem 'fog-local', '~> 0.6'
gem 'fog-openstack', '~> 1.0' gem 'fog-openstack', '~> 1.0'
gem 'fog-rackspace', '~> 0.1.1' gem 'fog-rackspace', '~> 0.1.1'
gem 'fog-aliyun', '~> 0.3' gem 'fog-aliyun', '~> 0.3'
gem 'gitlab-fog-azure-rm', '~> 1.0.1', require: false gem 'gitlab-fog-azure-rm', '~> 1.1.1', require: false
# for Google storage # for Google storage
gem 'google-api-client', '~> 0.33' gem 'google-api-client', '~> 0.33'
@ -183,13 +183,8 @@ gem 'rack', '~> 2.2.3'
# https://github.com/sharpstone/rack-timeout/blob/master/README.md#rails-apps-manually # https://github.com/sharpstone/rack-timeout/blob/master/README.md#rails-apps-manually
gem 'rack-timeout', '~> 0.5.1', require: 'rack/timeout/base' gem 'rack-timeout', '~> 0.5.1', require: 'rack/timeout/base'
group :unicorn do
gem 'unicorn', '~> 5.5'
gem 'unicorn-worker-killer', '~> 0.4.4'
end
group :puma do group :puma do
gem 'puma', '~> 5.1.1', require: false gem 'puma', '~> 5.3.1', require: false
gem 'puma_worker_killer', '~> 0.3.1', require: false gem 'puma_worker_killer', '~> 0.3.1', require: false
end end
@ -254,7 +249,7 @@ gem 'flowdock', '~> 0.7'
gem 'slack-messenger', '~> 2.3.4' gem 'slack-messenger', '~> 2.3.4'
# Hangouts Chat integration # Hangouts Chat integration
gem 'hangouts-chat', '~> 0.0.5' gem 'hangouts-chat', '~> 0.0.5', require: 'hangouts_chat'
# Asana integration # Asana integration
gem 'asana', '~> 0.10.3' gem 'asana', '~> 0.10.3'
@ -306,15 +301,20 @@ gem 'gitlab-license', '~> 1.5'
gem 'rack-attack', '~> 6.3.0' gem 'rack-attack', '~> 6.3.0'
# Sentry integration # Sentry integration
gem 'sentry-raven', '~> 3.0' gem 'sentry-raven', '~> 3.1'
# PostgreSQL query parsing # PostgreSQL query parsing
gem 'pg_query', '~> 1.3.0' #
# We need this fork until https://github.com/pganalyze/pg_query/pull/212
# and https://github.com/pganalyze/pg_query/pull/213 are
# released. gitlab-labkit will need to be updated to use the pg_query
# version.
gem 'gitlab-pg_query', '~> 2.0.4', require: 'pg_query'
gem 'premailer-rails', '~> 1.10.3' gem 'premailer-rails', '~> 1.10.3'
# LabKit: Tracing and Correlation # LabKit: Tracing and Correlation
gem 'gitlab-labkit', '~> 0.16.2' gem 'gitlab-labkit', '~> 0.18.0'
# 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'
@ -341,12 +341,11 @@ group :metrics do
# Prometheus # Prometheus
gem 'prometheus-client-mmap', '~> 0.12.0' gem 'prometheus-client-mmap', '~> 0.12.0'
gem 'raindrops', '~> 0.18'
end end
group :development do group :development do
gem 'lefthook', '~> 0.7.0', require: false gem 'lefthook', '~> 0.7.0', require: false
gem 'solargraph', '~> 0.40.4', require: false gem 'solargraph', '~> 0.42', require: false
gem 'letter_opener_web', '~> 1.4.0' gem 'letter_opener_web', '~> 1.4.0'
@ -403,7 +402,7 @@ group :development, :test do
end end
group :development, :test, :danger do group :development, :test, :danger do
gem 'gitlab-dangerfiles', '~> 2.0.0', require: false gem 'gitlab-dangerfiles', '~> 2.1.2', require: false
end end
group :development, :test, :coverage do group :development, :test, :coverage do
@ -481,18 +480,21 @@ end
gem 'spamcheck', '~> 0.1.0' gem 'spamcheck', '~> 0.1.0'
# Gitaly GRPC protocol definitions # Gitaly GRPC protocol definitions
gem 'gitaly', '~> 13.12.0.pre.rc1' gem 'gitaly', '~> 14.0.0.pre.rc2'
# KAS GRPC protocol definitions
gem 'kas-grpc', '~> 0.0.2'
gem 'grpc', '~> 1.30.2' gem 'grpc', '~> 1.30.2'
gem 'google-protobuf', '~> 3.14.0' gem 'google-protobuf', '~> 3.17.1'
gem 'toml-rb', '~> 1.0.0' gem 'toml-rb', '~> 1.0.0'
# Feature toggles # Feature toggles
gem 'flipper', '~> 0.17.1' gem 'flipper', '~> 0.21.0'
gem 'flipper-active_record', '~> 0.17.1' gem 'flipper-active_record', '~> 0.21.0'
gem 'flipper-active_support_cache_store', '~> 0.17.1' gem 'flipper-active_support_cache_store', '~> 0.21.0'
gem 'unleash', '~> 0.1.5' gem 'unleash', '~> 0.1.5'
gem 'gitlab-experiment', '~> 0.5.4' gem 'gitlab-experiment', '~> 0.5.4'

View file

@ -12,64 +12,68 @@ GEM
abstract_type (0.0.7) abstract_type (0.0.7)
acme-client (2.0.6) acme-client (2.0.6)
faraday (>= 0.17, < 2.0.0) faraday (>= 0.17, < 2.0.0)
actioncable (6.0.3.7) actioncable (6.1.3.2)
actionpack (= 6.0.3.7) actionpack (= 6.1.3.2)
activesupport (= 6.1.3.2)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailbox (6.0.3.7) actionmailbox (6.1.3.2)
actionpack (= 6.0.3.7) actionpack (= 6.1.3.2)
activejob (= 6.0.3.7) activejob (= 6.1.3.2)
activerecord (= 6.0.3.7) activerecord (= 6.1.3.2)
activestorage (= 6.0.3.7) activestorage (= 6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
mail (>= 2.7.1) mail (>= 2.7.1)
actionmailer (6.0.3.7) actionmailer (6.1.3.2)
actionpack (= 6.0.3.7) actionpack (= 6.1.3.2)
actionview (= 6.0.3.7) actionview (= 6.1.3.2)
activejob (= 6.0.3.7) activejob (= 6.1.3.2)
activesupport (= 6.1.3.2)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (6.0.3.7) actionpack (6.1.3.2)
actionview (= 6.0.3.7) actionview (= 6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
rack (~> 2.0, >= 2.0.8) 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.0.3.7) actiontext (6.1.3.2)
actionpack (= 6.0.3.7) actionpack (= 6.1.3.2)
activerecord (= 6.0.3.7) activerecord (= 6.1.3.2)
activestorage (= 6.0.3.7) activestorage (= 6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (6.0.3.7) actionview (6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
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.0.3.7) activejob (6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (6.0.3.7) activemodel (6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
activerecord (6.0.3.7) activerecord (6.1.3.2)
activemodel (= 6.0.3.7) activemodel (= 6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
activerecord-explain-analyze (0.1.0) activerecord-explain-analyze (0.1.0)
activerecord (>= 4) activerecord (>= 4)
pg pg
activestorage (6.0.3.7) activestorage (6.1.3.2)
actionpack (= 6.0.3.7) actionpack (= 6.1.3.2)
activejob (= 6.0.3.7) activejob (= 6.1.3.2)
activerecord (= 6.0.3.7) activerecord (= 6.1.3.2)
activesupport (= 6.1.3.2)
marcel (~> 1.0.0) marcel (~> 1.0.0)
activesupport (6.0.3.7) mini_mime (~> 1.0.2)
activesupport (6.1.3.2)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2) i18n (>= 1.6, < 2)
minitest (~> 5.1) minitest (>= 5.1)
tzinfo (~> 1.1) tzinfo (~> 2.0)
zeitwerk (~> 2.2, >= 2.2.2) zeitwerk (~> 2.3)
acts-as-taggable-on (7.0.0) acts-as-taggable-on (7.0.0)
activerecord (>= 5.0, < 6.2) activerecord (>= 5.0, < 6.2)
adamantium (0.2.0) adamantium (0.2.0)
@ -80,9 +84,9 @@ GEM
aes_key_wrap (1.1.0) aes_key_wrap (1.1.0)
akismet (3.0.0) akismet (3.0.0)
android_key_attestation (0.3.0) android_key_attestation (0.3.0)
apollo_upload_server (2.0.2) apollo_upload_server (2.1.0)
actionpack (>= 4.2)
graphql (>= 1.8) graphql (>= 1.8)
rails (>= 4.2)
asana (0.10.3) asana (0.10.3)
faraday (~> 1.0) faraday (~> 1.0)
faraday_middleware (~> 1.0) faraday_middleware (~> 1.0)
@ -133,7 +137,7 @@ GEM
net-http-persistent (~> 4.0) net-http-persistent (~> 4.0)
nokogiri (~> 1.11.0.rc2) nokogiri (~> 1.11.0.rc2)
babosa (1.0.4) babosa (1.0.4)
backport (1.1.2) backport (1.2.0)
base32 (0.3.2) base32 (0.3.2)
batch-loader (2.0.1) batch-loader (2.0.1)
bcrypt (3.1.16) bcrypt (3.1.16)
@ -348,13 +352,24 @@ GEM
factory_bot_rails (6.1.0) factory_bot_rails (6.1.0)
factory_bot (~> 6.1.0) factory_bot (~> 6.1.0)
railties (>= 5.0.0) railties (>= 5.0.0)
faraday (1.0.1) faraday (1.4.2)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7) faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0) faraday (>= 0.8.0)
http-cookie (~> 1.0.0) http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-http-cache (2.2.0) faraday-http-cache (2.2.0)
faraday (>= 0.8) faraday (>= 0.8)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.1.0)
faraday_middleware (1.0.0) faraday_middleware (1.0.0)
faraday (~> 1.0) faraday (~> 1.0)
faraday_middleware-aws-sigv4 (0.3.0) faraday_middleware-aws-sigv4 (0.3.0)
@ -366,19 +381,19 @@ GEM
fast_blank (1.0.0) fast_blank (1.0.0)
fast_gettext (1.6.0) fast_gettext (1.6.0)
ffaker (2.10.0) ffaker (2.10.0)
ffi (1.13.1) ffi (1.15.1)
ffi-compiler (1.0.1) ffi-compiler (1.0.1)
ffi (>= 1.0.0) ffi (>= 1.0.0)
rake rake
ffi-yajl (2.3.4) ffi-yajl (2.3.4)
libyajl2 (~> 1.2) libyajl2 (~> 1.2)
flipper (0.17.1) flipper (0.21.0)
flipper-active_record (0.17.1) flipper-active_record (0.21.0)
activerecord (>= 4.2, < 7) activerecord (>= 5.0, < 7)
flipper (~> 0.17.1) flipper (~> 0.21.0)
flipper-active_support_cache_store (0.17.1) flipper-active_support_cache_store (0.21.0)
activesupport (>= 4.2, < 7) activesupport (>= 5.0, < 7)
flipper (~> 0.17.1) flipper (~> 0.21.0)
flowdock (0.7.1) flowdock (0.7.1)
httparty (~> 0.7) httparty (~> 0.7)
multi_json multi_json
@ -439,7 +454,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 (13.12.0.pre.rc1) gitaly (14.0.0.pre.rc2)
grpc (~> 1.0) grpc (~> 1.0)
github-markup (1.7.0) github-markup (1.7.0)
gitlab (4.16.1) gitlab (4.16.1)
@ -447,13 +462,13 @@ GEM
terminal-table (~> 1.5, >= 1.5.1) terminal-table (~> 1.5, >= 1.5.1)
gitlab-chronic (0.10.5) gitlab-chronic (0.10.5)
numerizer (~> 0.2) numerizer (~> 0.2)
gitlab-dangerfiles (2.0.0) gitlab-dangerfiles (2.1.2)
danger-gitlab danger-gitlab
gitlab-experiment (0.5.4) gitlab-experiment (0.5.4)
activesupport (>= 3.0) activesupport (>= 3.0)
request_store (>= 1.0) request_store (>= 1.0)
scientist (~> 1.6, >= 1.6.0) scientist (~> 1.6, >= 1.6.0)
gitlab-fog-azure-rm (1.0.1) gitlab-fog-azure-rm (1.1.1)
azure-storage-blob (~> 2.0) azure-storage-blob (~> 2.0)
azure-storage-common (~> 2.0) azure-storage-common (~> 2.0)
fog-core (= 2.1.0) fog-core (= 2.1.0)
@ -467,13 +482,13 @@ GEM
fog-xml (~> 0.1.0) fog-xml (~> 0.1.0)
google-api-client (>= 0.44.2, < 0.51) google-api-client (>= 0.44.2, < 0.51)
google-cloud-env (~> 1.2) google-cloud-env (~> 1.2)
gitlab-labkit (0.16.2) gitlab-labkit (0.18.0)
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)
gitlab-pg_query (~> 2.0)
grpc (~> 1.19) grpc (~> 1.19)
jaeger-client (~> 1.1) jaeger-client (~> 1.1)
opentracing (~> 0.4) opentracing (~> 0.4)
pg_query (~> 1.3)
redis (> 3.0.0, < 5.0.0) redis (> 3.0.0, < 5.0.0)
gitlab-license (1.5.0) gitlab-license (1.5.0)
gitlab-mail_room (0.0.9) gitlab-mail_room (0.0.9)
@ -483,6 +498,8 @@ GEM
addressable (~> 2.7) addressable (~> 2.7)
omniauth (~> 1.9) omniauth (~> 1.9)
openid_connect (~> 1.2) openid_connect (~> 1.2)
gitlab-pg_query (2.0.4)
google-protobuf (>= 3.17.1)
gitlab-rdoc (6.3.2) gitlab-rdoc (6.3.2)
gitlab-sidekiq-fetcher (0.5.6) gitlab-sidekiq-fetcher (0.5.6)
sidekiq (~> 5) sidekiq (~> 5)
@ -517,7 +534,7 @@ GEM
signet (~> 0.12) signet (~> 0.12)
google-cloud-env (1.4.0) google-cloud-env (1.4.0)
faraday (>= 0.17.3, < 2.0) faraday (>= 0.17.3, < 2.0)
google-protobuf (3.14.0) google-protobuf (3.17.1)
googleapis-common-protos-types (1.0.6) googleapis-common-protos-types (1.0.6)
google-protobuf (~> 3.14) google-protobuf (~> 3.14)
googleauth (0.14.0) googleauth (0.14.0)
@ -623,7 +640,7 @@ GEM
http-cookie (1.0.3) http-cookie (1.0.3)
domain_name (~> 0.5) domain_name (~> 0.5)
http-form_data (2.3.0) http-form_data (2.3.0)
http-parser (1.2.1) http-parser (1.2.3)
ffi-compiler (>= 1.0, < 2.0) ffi-compiler (>= 1.0, < 2.0)
httparty (0.16.4) httparty (0.16.4)
mime-types (~> 3.0) mime-types (~> 3.0)
@ -677,7 +694,8 @@ GEM
activerecord activerecord
kaminari-core (= 1.2.1) kaminari-core (= 1.2.1)
kaminari-core (1.2.1) kaminari-core (1.2.1)
kgio (2.11.3) kas-grpc (0.0.2)
grpc (~> 1.0)
knapsack (1.21.1) knapsack (1.21.1)
rake rake
kramdown (2.3.1) kramdown (2.3.1)
@ -691,7 +709,7 @@ GEM
rest-client (~> 2.0) rest-client (~> 2.0)
launchy (2.5.0) launchy (2.5.0)
addressable (~> 2.7) addressable (~> 2.7)
lefthook (0.7.2) lefthook (0.7.5)
letter_opener (1.7.0) letter_opener (1.7.0)
launchy (~> 2.2) launchy (~> 2.2)
letter_opener_web (1.4.0) letter_opener_web (1.4.0)
@ -743,7 +761,7 @@ GEM
mime-types-data (3.2020.0512) mime-types-data (3.2020.0512)
mini_histogram (0.3.1) mini_histogram (0.3.1)
mini_magick (4.10.1) mini_magick (4.10.1)
mini_mime (1.1.0) mini_mime (1.0.2)
mini_portile2 (2.5.0) mini_portile2 (2.5.0)
minitest (5.11.3) minitest (5.11.3)
mixlib-cli (2.1.8) mixlib-cli (2.1.8)
@ -904,7 +922,6 @@ GEM
peek (1.1.0) peek (1.1.0)
railties (>= 4.0.0) railties (>= 4.0.0)
pg (1.2.3) pg (1.2.3)
pg_query (1.3.0)
plist (3.6.0) plist (3.6.0)
png_quantizator (0.2.1) png_quantizator (0.2.1)
po_to_json (1.0.1) po_to_json (1.0.1)
@ -930,12 +947,12 @@ GEM
pry (~> 0.13.0) pry (~> 0.13.0)
pry-rails (0.3.9) pry-rails (0.3.9)
pry (>= 0.10.4) pry (>= 0.10.4)
pry-shell (0.4.0) pry-shell (0.4.1)
pry (~> 0.13.0) pry (~> 0.13.0)
tty-markdown tty-markdown
tty-prompt tty-prompt
public_suffix (4.0.6) public_suffix (4.0.6)
puma (5.1.1) puma (5.3.2)
nio4r (~> 2.0) nio4r (~> 2.0)
puma_worker_killer (0.3.1) puma_worker_killer (0.3.1)
get_process_mem (~> 0.2) get_process_mem (~> 0.2)
@ -963,20 +980,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.0.3.7) rails (6.1.3.2)
actioncable (= 6.0.3.7) actioncable (= 6.1.3.2)
actionmailbox (= 6.0.3.7) actionmailbox (= 6.1.3.2)
actionmailer (= 6.0.3.7) actionmailer (= 6.1.3.2)
actionpack (= 6.0.3.7) actionpack (= 6.1.3.2)
actiontext (= 6.0.3.7) actiontext (= 6.1.3.2)
actionview (= 6.0.3.7) actionview (= 6.1.3.2)
activejob (= 6.0.3.7) activejob (= 6.1.3.2)
activemodel (= 6.0.3.7) activemodel (= 6.1.3.2)
activerecord (= 6.0.3.7) activerecord (= 6.1.3.2)
activestorage (= 6.0.3.7) activestorage (= 6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
bundler (>= 1.3.0) bundler (>= 1.15.0)
railties (= 6.0.3.7) railties (= 6.1.3.2)
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)
@ -990,14 +1007,13 @@ 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.0.3.7) railties (6.1.3.2)
actionpack (= 6.0.3.7) actionpack (= 6.1.3.2)
activesupport (= 6.0.3.7) activesupport (= 6.1.3.2)
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.20.3, < 2.0) thor (~> 1.0)
rainbow (3.0.0) rainbow (3.0.0)
raindrops (0.19.1)
rake (13.0.3) rake (13.0.3)
rb-fsevent (0.10.4) rb-fsevent (0.10.4)
rb-inotify (0.10.1) rb-inotify (0.10.1)
@ -1130,7 +1146,7 @@ GEM
nokogiri (>= 1.10.5) nokogiri (>= 1.10.5)
rexml rexml
ruby-statistics (2.1.2) ruby-statistics (2.1.2)
ruby2_keywords (0.0.2) ruby2_keywords (0.0.4)
ruby_parser (3.15.0) ruby_parser (3.15.0)
sexp_processor (~> 4.9) sexp_processor (~> 4.9)
rubyntlm (0.6.2) rubyntlm (0.6.2)
@ -1169,7 +1185,7 @@ GEM
selenium-webdriver (3.142.7) selenium-webdriver (3.142.7)
childprocess (>= 0.5, < 4.0) childprocess (>= 0.5, < 4.0)
rubyzip (>= 1.2.2) rubyzip (>= 1.2.2)
sentry-raven (3.0.4) sentry-raven (3.1.2)
faraday (>= 1.0) faraday (>= 1.0)
settingslogic (2.0.9) settingslogic (2.0.9)
sexp_processor (4.15.1) sexp_processor (4.15.1)
@ -1200,10 +1216,11 @@ GEM
slack-messenger (2.3.4) slack-messenger (2.3.4)
snowplow-tracker (0.6.1) snowplow-tracker (0.6.1)
contracts (~> 0.7, <= 0.11) contracts (~> 0.7, <= 0.11)
solargraph (0.40.4) solargraph (0.42.3)
backport (~> 1.1) backport (~> 1.2)
benchmark benchmark
bundler (>= 1.17.2) bundler (>= 1.17.2)
diff-lcs (~> 1.4)
e2mmap e2mmap
jaro_winkler (~> 1.5) jaro_winkler (~> 1.5)
kramdown (~> 2.3) kramdown (~> 2.3)
@ -1255,8 +1272,8 @@ GEM
terser (1.0.2) terser (1.0.2)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
test-prof (0.12.0) test-prof (0.12.0)
test_file_finder (0.1.3) test_file_finder (0.1.4)
faraday (~> 1.0.1) faraday (~> 1.0)
text (1.3.1) text (1.3.1)
thin (1.8.0) thin (1.8.0)
daemons (~> 1.0, >= 1.0.9) daemons (~> 1.0, >= 1.0.9)
@ -1305,8 +1322,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)
tzinfo (1.2.9) tzinfo (2.0.4)
thread_safe (~> 0.1) concurrent-ruby (~> 1.0)
u2f (0.2.1) u2f (0.2.1)
uber (0.1.0) uber (0.1.0)
unf (0.1.4) unf (0.1.4)
@ -1314,12 +1331,6 @@ GEM
unf_ext (0.0.7.7) unf_ext (0.0.7.7)
unicode-display_width (1.7.0) unicode-display_width (1.7.0)
unicode_utils (1.4.0) unicode_utils (1.4.0)
unicorn (5.5.5)
kgio (~> 2.6)
raindrops (~> 0.7)
unicorn-worker-killer (0.4.4)
get_process_mem (~> 0)
unicorn (>= 4, < 6)
uniform_notifier (1.13.0) uniform_notifier (1.13.0)
unleash (0.1.5) unleash (0.1.5)
murmurhash3 (~> 0.1.6) murmurhash3 (~> 0.1.6)
@ -1393,7 +1404,7 @@ DEPENDENCIES
acts-as-taggable-on (~> 7.0) acts-as-taggable-on (~> 7.0)
addressable (~> 2.7) addressable (~> 2.7)
akismet (~> 3.0) akismet (~> 3.0)
apollo_upload_server (~> 2.0.2) apollo_upload_server (~> 2.1.0)
asana (~> 0.10.3) asana (~> 0.10.3)
asciidoctor (~> 2.0.10) asciidoctor (~> 2.0.10)
asciidoctor-include-ext (~> 0.3.1) asciidoctor-include-ext (~> 0.3.1)
@ -1456,9 +1467,9 @@ DEPENDENCIES
faraday_middleware-aws-sigv4 (~> 0.3.0) faraday_middleware-aws-sigv4 (~> 0.3.0)
fast_blank fast_blank
ffaker (~> 2.10) ffaker (~> 2.10)
flipper (~> 0.17.1) flipper (~> 0.21.0)
flipper-active_record (~> 0.17.1) flipper-active_record (~> 0.21.0)
flipper-active_support_cache_store (~> 0.17.1) flipper-active_support_cache_store (~> 0.21.0)
flowdock (~> 0.7) flowdock (~> 0.7)
fog-aliyun (~> 0.3) fog-aliyun (~> 0.3)
fog-aws (~> 3.9) fog-aws (~> 3.9)
@ -1472,19 +1483,20 @@ 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 (~> 13.12.0.pre.rc1) gitaly (~> 14.0.0.pre.rc2)
github-markup (~> 1.7.0) github-markup (~> 1.7.0)
gitlab-chronic (~> 0.10.5) gitlab-chronic (~> 0.10.5)
gitlab-dangerfiles (~> 2.0.0) gitlab-dangerfiles (~> 2.1.2)
gitlab-experiment (~> 0.5.4) gitlab-experiment (~> 0.5.4)
gitlab-fog-azure-rm (~> 1.0.1) gitlab-fog-azure-rm (~> 1.1.1)
gitlab-fog-google (~> 1.13) gitlab-fog-google (~> 1.13)
gitlab-labkit (~> 0.16.2) gitlab-labkit (~> 0.18.0)
gitlab-license (~> 1.5) gitlab-license (~> 1.5)
gitlab-mail_room (~> 0.0.9) gitlab-mail_room (~> 0.0.9)
gitlab-markup (~> 1.7.1) gitlab-markup (~> 1.7.1)
gitlab-net-dns (~> 0.9.1) gitlab-net-dns (~> 0.9.1)
gitlab-omniauth-openid-connect (~> 0.4.0) gitlab-omniauth-openid-connect (~> 0.4.0)
gitlab-pg_query (~> 2.0.4)
gitlab-rdoc (~> 6.3.2) gitlab-rdoc (~> 6.3.2)
gitlab-sidekiq-fetcher (= 0.5.6) gitlab-sidekiq-fetcher (= 0.5.6)
gitlab-styles (~> 6.2.0) gitlab-styles (~> 6.2.0)
@ -1492,7 +1504,7 @@ DEPENDENCIES
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.14.0) google-protobuf (~> 3.17.1)
gpgme (~> 2.0.19) gpgme (~> 2.0.19)
grape (~> 1.5.2) grape (~> 1.5.2)
grape-entity (~> 0.9.0) grape-entity (~> 0.9.0)
@ -1523,6 +1535,7 @@ DEPENDENCIES
json_schemer (~> 0.2.12) json_schemer (~> 0.2.12)
jwt (~> 2.1.0) jwt (~> 2.1.0)
kaminari (~> 1.0) kaminari (~> 1.0)
kas-grpc (~> 0.0.2)
knapsack (~> 1.21.1) knapsack (~> 1.21.1)
kramdown (~> 2.3.1) kramdown (~> 2.3.1)
kubeclient (~> 4.9.1) kubeclient (~> 4.9.1)
@ -1573,14 +1586,13 @@ DEPENDENCIES
parslet (~> 1.8) parslet (~> 1.8)
peek (~> 1.1) peek (~> 1.1)
pg (~> 1.1) pg (~> 1.1)
pg_query (~> 1.3.0)
png_quantizator (~> 0.2.1) png_quantizator (~> 0.2.1)
premailer-rails (~> 1.10.3) premailer-rails (~> 1.10.3)
prometheus-client-mmap (~> 0.12.0) prometheus-client-mmap (~> 0.12.0)
pry-byebug pry-byebug
pry-rails (~> 0.3.9) pry-rails (~> 0.3.9)
pry-shell (~> 0.4.0) pry-shell (~> 0.4.0)
puma (~> 5.1.1) puma (~> 5.3.1)
puma_worker_killer (~> 0.3.1) puma_worker_killer (~> 0.3.1)
rack (~> 2.2.3) rack (~> 2.2.3)
rack-attack (~> 6.3.0) rack-attack (~> 6.3.0)
@ -1588,11 +1600,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.0.3.7) rails (~> 6.1.3.2)
rails-controller-testing rails-controller-testing
rails-i18n (~> 6.0) rails-i18n (~> 6.0)
rainbow (~> 3.0) rainbow (~> 3.0)
raindrops (~> 0.18)
rblineprof (~> 0.3.6) rblineprof (~> 0.3.6)
rbtrace (~> 0.4) rbtrace (~> 0.4)
re2 (~> 1.2.0) re2 (~> 1.2.0)
@ -1623,7 +1634,7 @@ DEPENDENCIES
sassc-rails (~> 2.1.0) sassc-rails (~> 2.1.0)
seed-fu (~> 2.3.7) seed-fu (~> 2.3.7)
selenium-webdriver (~> 3.142) selenium-webdriver (~> 3.142)
sentry-raven (~> 3.0) sentry-raven (~> 3.1)
settingslogic (~> 2.0.9) settingslogic (~> 2.0.9)
shoulda-matchers (~> 4.0.1) shoulda-matchers (~> 4.0.1)
sidekiq (~> 5.2.7) sidekiq (~> 5.2.7)
@ -1633,7 +1644,7 @@ DEPENDENCIES
simplecov-cobertura (~> 1.3.1) simplecov-cobertura (~> 1.3.1)
slack-messenger (~> 2.3.4) slack-messenger (~> 2.3.4)
snowplow-tracker (~> 0.6.1) snowplow-tracker (~> 0.6.1)
solargraph (~> 0.40.4) solargraph (~> 0.42)
spamcheck (~> 0.1.0) spamcheck (~> 0.1.0)
spring (~> 2.1.0) spring (~> 2.1.0)
spring-commands-rspec (~> 1.0.4) spring-commands-rspec (~> 1.0.4)
@ -1652,8 +1663,6 @@ DEPENDENCIES
truncato (~> 0.7.11) truncato (~> 0.7.11)
u2f (~> 0.2.1) u2f (~> 0.2.1)
unf (~> 0.1.4) unf (~> 0.1.4)
unicorn (~> 5.5)
unicorn-worker-killer (~> 0.4.4)
unleash (~> 0.1.5) unleash (~> 0.1.5)
valid_email (~> 0.1) valid_email (~> 0.1)
validates_hostname (~> 1.0.11) validates_hostname (~> 1.0.11)

View file

@ -68,9 +68,9 @@ GitLab is an open source project and we are very happy to accept community contr
To work on GitLab itself, we recommend setting up your development environment with [the GitLab Development Kit](https://gitlab.com/gitlab-org/gitlab-development-kit). To work on GitLab itself, we recommend setting up your development environment with [the GitLab Development Kit](https://gitlab.com/gitlab-org/gitlab-development-kit).
If you do not use the GitLab Development Kit you need to install and setup all the dependencies yourself, this is a lot of work and error prone. If you do not use the GitLab Development Kit you need to install and setup all the dependencies yourself, this is a lot of work and error prone.
One small thing you also have to do when installing it yourself is to copy the example development Unicorn configuration file: One small thing you also have to do when installing it yourself is to copy the example development Puma configuration file:
cp config/unicorn.rb.example.development config/unicorn.rb cp config/puma.rb.example.development config/puma.rb
Instructions on how to start GitLab and how to run the tests can be found in the [getting started section of the GitLab Development Kit](https://gitlab.com/gitlab-org/gitlab-development-kit#getting-started). Instructions on how to start GitLab and how to run the tests can be found in the [getting started section of the GitLab Development Kit](https://gitlab.com/gitlab-org/gitlab-development-kit#getting-started).
@ -81,8 +81,8 @@ GitLab is a Ruby on Rails application that runs on the following software:
- Ubuntu/Debian/CentOS/RHEL/OpenSUSE - Ubuntu/Debian/CentOS/RHEL/OpenSUSE
- Ruby (MRI) 2.7.2 - Ruby (MRI) 2.7.2
- Git 2.31+ - Git 2.31+
- Redis 4.0+ - Redis 5.0+
- PostgreSQL 11+ - PostgreSQL 12+
For more information please see the [architecture](https://docs.gitlab.com/ee/development/architecture.html) and [requirements](https://docs.gitlab.com/ee/install/requirements.html) documentation. For more information please see the [architecture](https://docs.gitlab.com/ee/development/architecture.html) and [requirements](https://docs.gitlab.com/ee/install/requirements.html) documentation.

View file

@ -1 +1 @@
13.12.9 14.0.10

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

View file

@ -2,7 +2,7 @@
import { GlModal, GlTabs, GlTab, GlSearchBoxByType, GlSprintf } from '@gitlab/ui'; import { GlModal, GlTabs, GlTab, GlSearchBoxByType, GlSprintf } from '@gitlab/ui';
import { mapState, mapActions } from 'vuex'; import { mapState, mapActions } from 'vuex';
import ReviewTabContainer from '~/add_context_commits_modal/components/review_tab_container.vue'; import ReviewTabContainer from '~/add_context_commits_modal/components/review_tab_container.vue';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import { BV_SHOW_MODAL } from '~/lib/utils/constants'; import { BV_SHOW_MODAL } from '~/lib/utils/constants';
import { s__ } from '~/locale'; import { s__ } from '~/locale';
import eventHub from '../event_hub'; import eventHub from '../event_hub';
@ -192,9 +192,11 @@ export default {
window.location.reload(); window.location.reload();
} }
if (!values[0] && !values[1]) { if (!values[0] && !values[1]) {
createFlash( createFlash({
s__('ContextCommits|Failed to create/remove context commits. Please try again.'), message: s__(
); 'ContextCommits|Failed to create/remove context commits. Please try again.',
),
});
} }
}); });
} else if (this.uniqueCommits.length > 0) { } else if (this.uniqueCommits.length > 0) {

View file

@ -1,6 +1,6 @@
import _ from 'lodash'; import _ from 'lodash';
import Api from '~/api'; import Api from '~/api';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import { s__ } from '~/locale'; import { s__ } from '~/locale';
import * as types from './mutation_types'; import * as types from './mutation_types';
@ -71,7 +71,9 @@ export const createContextCommits = ({ state }, { commits, forceReload = false }
}) })
.catch(() => { .catch(() => {
if (forceReload) { if (forceReload) {
createFlash(s__('ContextCommits|Failed to create context commits. Please try again.')); createFlash({
message: s__('ContextCommits|Failed to create context commits. Please try again.'),
});
} }
return false; return false;
@ -111,7 +113,9 @@ export const removeContextCommits = ({ state }, forceReload = false) =>
}) })
.catch(() => { .catch(() => {
if (forceReload) { if (forceReload) {
createFlash(s__('ContextCommits|Failed to delete context commits. Please try again.')); createFlash({
message: s__('ContextCommits|Failed to delete context commits. Please try again.'),
});
} }
return false; return false;

View file

@ -1,5 +1,5 @@
import Api from '~/api'; import Api from '~/api';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
import { s__ } from '~/locale'; import { s__ } from '~/locale';
import * as types from './mutation_types'; import * as types from './mutation_types';
@ -21,5 +21,7 @@ export const receiveStatisticsSuccess = ({ commit }, statistics) =>
export const receiveStatisticsError = ({ commit }, error) => { export const receiveStatisticsError = ({ commit }, error) => {
commit(types.RECEIVE_STATISTICS_ERROR, error); commit(types.RECEIVE_STATISTICS_ERROR, error);
createFlash(s__('AdminDashboard|Error loading the statistics. Please try again')); createFlash({
message: s__('AdminDashboard|Error loading the statistics. Please try again'),
});
}; };

View file

@ -2,16 +2,13 @@
import { GlSkeletonLoader, GlTable } from '@gitlab/ui'; import { GlSkeletonLoader, GlTable } from '@gitlab/ui';
import createFlash from '~/flash'; import createFlash from '~/flash';
import { convertNodeIdsFromGraphQLIds } from '~/graphql_shared/utils'; import { convertNodeIdsFromGraphQLIds } from '~/graphql_shared/utils';
import { thWidthClass } from '~/lib/utils/table_utility';
import { s__, __ } from '~/locale'; import { s__, __ } from '~/locale';
import UserDate from '~/vue_shared/components/user_date.vue'; import UserDate from '~/vue_shared/components/user_date.vue';
import getUsersGroupCountsQuery from '../graphql/queries/get_users_group_counts.query.graphql'; import getUsersGroupCountsQuery from '../graphql/queries/get_users_group_counts.query.graphql';
import UserActions from './user_actions.vue'; import UserActions from './user_actions.vue';
import UserAvatar from './user_avatar.vue'; import UserAvatar from './user_avatar.vue';
const DEFAULT_TH_CLASSES =
'gl-bg-transparent! gl-border-b-solid! gl-border-b-gray-100! gl-p-5! gl-border-b-1!';
const thWidthClass = (width) => `gl-w-${width}p ${DEFAULT_TH_CLASSES}`;
export default { export default {
components: { components: {
GlSkeletonLoader, GlSkeletonLoader,
@ -112,7 +109,7 @@ export default {
:empty-text="s__('AdminUsers|No users found')" :empty-text="s__('AdminUsers|No users found')"
show-empty show-empty
stacked="md" stacked="md"
data-qa-selector="user_row_content" :tbody-tr-attr="{ 'data-qa-selector': 'user_row_content' }"
> >
<template #cell(name)="{ item: user }"> <template #cell(name)="{ item: user }">
<user-avatar :user="user" :admin-user-path="paths.adminUser" /> <user-avatar :user="user" :admin-user-path="paths.adminUser" />

View file

@ -26,6 +26,7 @@ import {
} from '~/vue_shared/components/paginated_table_with_search_and_tabs/constants'; } from '~/vue_shared/components/paginated_table_with_search_and_tabs/constants';
import PaginatedTableWithSearchAndTabs from '~/vue_shared/components/paginated_table_with_search_and_tabs/paginated_table_with_search_and_tabs.vue'; import PaginatedTableWithSearchAndTabs from '~/vue_shared/components/paginated_table_with_search_and_tabs/paginated_table_with_search_and_tabs.vue';
import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue'; import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { ALERTS_STATUS_TABS, SEVERITY_LEVELS, trackAlertListViewsOptions } from '../constants'; import { ALERTS_STATUS_TABS, SEVERITY_LEVELS, trackAlertListViewsOptions } from '../constants';
import getAlertsCountByStatus from '../graphql/queries/get_count_by_status.query.graphql'; import getAlertsCountByStatus from '../graphql/queries/get_count_by_status.query.graphql';
@ -114,6 +115,7 @@ export default {
directives: { directives: {
GlTooltip: GlTooltipDirective, GlTooltip: GlTooltipDirective,
}, },
mixins: [glFeatureFlagMixin()],
inject: ['projectPath', 'textQuery', 'assigneeUsernameQuery', 'populatingAlertsHelpUrl'], inject: ['projectPath', 'textQuery', 'assigneeUsernameQuery', 'populatingAlertsHelpUrl'],
apollo: { apollo: {
alerts: { alerts: {
@ -275,7 +277,7 @@ export default {
</gl-sprintf> </gl-sprintf>
</gl-alert> </gl-alert>
<alerts-deprecation-warning /> <alerts-deprecation-warning v-if="!glFeatures.managedAlertsDeprecation" />
<paginated-table-with-search-and-tabs <paginated-table-with-search-and-tabs
:show-error-msg="showErrorMsg" :show-error-msg="showErrorMsg"

View file

@ -3,7 +3,6 @@ import {
GlButton, GlButton,
GlSprintf, GlSprintf,
GlLink, GlLink,
GlIcon,
GlFormGroup, GlFormGroup,
GlFormCheckbox, GlFormCheckbox,
GlDropdown, GlDropdown,
@ -22,7 +21,6 @@ export default {
GlSprintf, GlSprintf,
GlLink, GlLink,
GlFormGroup, GlFormGroup,
GlIcon,
GlFormCheckbox, GlFormCheckbox,
GlDropdown, GlDropdown,
GlDropdownItem, GlDropdownItem,
@ -98,7 +96,7 @@ export default {
<label class="gl-display-inline-flex" for="alert-integration-settings-issue-template"> <label class="gl-display-inline-flex" for="alert-integration-settings-issue-template">
{{ $options.i18n.incidentTemplate.label }} {{ $options.i18n.incidentTemplate.label }}
<gl-link :href="$options.ISSUE_TEMPLATES_DOCS_LINK" target="_blank"> <gl-link :href="$options.ISSUE_TEMPLATES_DOCS_LINK" target="_blank">
<gl-icon name="question" :size="12" /> <span class="gl-font-weight-normal gl-pl-2">{{ $options.i18n.introLinkText }}</span>
</gl-link> </gl-link>
</label> </label>
<gl-dropdown <gl-dropdown
@ -134,7 +132,7 @@ export default {
ref="submitBtn" ref="submitBtn"
data-qa-selector="save_changes_button" data-qa-selector="save_changes_button"
:disabled="loading" :disabled="loading"
variant="success" variant="confirm"
type="submit" type="submit"
class="js-no-auto-disable" class="js-no-auto-disable"
> >

View file

@ -23,7 +23,6 @@ import getCurrentIntegrationQuery from '../graphql/queries/get_current_integrati
export const i18n = { export const i18n = {
deleteIntegration: s__('AlertSettings|Delete integration'), deleteIntegration: s__('AlertSettings|Delete integration'),
editIntegration: s__('AlertSettings|Edit integration'), editIntegration: s__('AlertSettings|Edit integration'),
title: s__('AlertsIntegrations|Current integrations'),
emptyState: s__('AlertsIntegrations|No integrations have been added yet.'), emptyState: s__('AlertsIntegrations|No integrations have been added yet.'),
status: { status: {
enabled: { enabled: {
@ -141,7 +140,6 @@ export default {
<template> <template>
<div class="incident-management-list"> <div class="incident-management-list">
<h5 class="gl-font-lg gl-mt-5">{{ $options.i18n.title }}</h5>
<gl-table <gl-table
class="integration-list" class="integration-list"
:items="integrations" :items="integrations"
@ -155,7 +153,7 @@ export default {
<span v-if="item.active" data-testid="integration-activated-status"> <span v-if="item.active" data-testid="integration-activated-status">
<gl-icon <gl-icon
v-gl-tooltip v-gl-tooltip
name="check-circle-filled" name="check"
:size="16" :size="16"
class="gl-text-green-500 gl-hover-cursor-pointer gl-mr-3" class="gl-text-green-500 gl-hover-cursor-pointer gl-mr-3"
:title="$options.i18n.status.enabled.tooltip" :title="$options.i18n.status.enabled.tooltip"

View file

@ -1,5 +1,5 @@
<script> <script>
import { GlButton, GlAlert } from '@gitlab/ui'; import { GlButton, GlAlert, GlTabs, GlTab } from '@gitlab/ui';
import createHttpIntegrationMutation from 'ee_else_ce/alerts_settings/graphql/mutations/create_http_integration.mutation.graphql'; import createHttpIntegrationMutation from 'ee_else_ce/alerts_settings/graphql/mutations/create_http_integration.mutation.graphql';
import updateHttpIntegrationMutation from 'ee_else_ce/alerts_settings/graphql/mutations/update_http_integration.mutation.graphql'; import updateHttpIntegrationMutation from 'ee_else_ce/alerts_settings/graphql/mutations/update_http_integration.mutation.graphql';
import createFlash, { FLASH_TYPES } from '~/flash'; import createFlash, { FLASH_TYPES } from '~/flash';
@ -30,6 +30,7 @@ import {
INTEGRATION_INACTIVE_PAYLOAD_TEST_ERROR, INTEGRATION_INACTIVE_PAYLOAD_TEST_ERROR,
DEFAULT_ERROR, DEFAULT_ERROR,
} from '../utils/error_messages'; } from '../utils/error_messages';
import AlertsForm from './alerts_form.vue';
import IntegrationsList from './alerts_integrations_list.vue'; import IntegrationsList from './alerts_integrations_list.vue';
import AlertSettingsForm from './alerts_settings_form.vue'; import AlertSettingsForm from './alerts_settings_form.vue';
@ -38,9 +39,12 @@ export default {
i18n, i18n,
components: { components: {
IntegrationsList, IntegrationsList,
AlertsForm,
AlertSettingsForm, AlertSettingsForm,
GlButton,
GlAlert, GlAlert,
GlButton,
GlTabs,
GlTab,
}, },
inject: { inject: {
projectPath: { projectPath: {
@ -167,7 +171,7 @@ export default {
if (testAfterSubmit) { if (testAfterSubmit) {
this.viewIntegration(integration, tabIndices.sendTestAlert); this.viewIntegration(integration, tabIndices.sendTestAlert);
} else { } else {
this.clearCurrentIntegration(type); this.clearCurrentIntegration({ type });
} }
createFlash({ createFlash({
@ -347,7 +351,8 @@ export default {
</script> </script>
<template> <template>
<div> <gl-tabs data-testid="alert-integration-settings">
<gl-tab :title="$options.i18n.settingsTabs.currentIntegrations">
<gl-alert <gl-alert
v-if="showSuccessfulCreateAlert" v-if="showSuccessfulCreateAlert"
class="gl-mt-n2" class="gl-mt-n2"
@ -388,5 +393,9 @@ export default {
@test-alert-payload="testAlertPayload" @test-alert-payload="testAlertPayload"
@save-and-test-alert-payload="saveAndTestAlertPayload" @save-and-test-alert-payload="saveAndTestAlertPayload"
/> />
</div> </gl-tab>
<gl-tab :title="$options.i18n.settingsTabs.integrationSettings">
<alerts-form class="gl-pt-3" data-testid="alert-integration-settings-tab" />
</gl-tab>
</gl-tabs>
</template> </template>

View file

@ -93,6 +93,10 @@ export const i18n = {
integrationRemoved: s__('AlertsIntegrations|The integration is deleted.'), integrationRemoved: s__('AlertsIntegrations|The integration is deleted.'),
alertSent: s__('AlertsIntegrations|The test alert should now be visible in your alerts list.'), alertSent: s__('AlertsIntegrations|The test alert should now be visible in your alerts list.'),
addNewIntegration: s__('AlertSettings|Add new integration'), addNewIntegration: s__('AlertSettings|Add new integration'),
settingsTabs: {
currentIntegrations: s__('AlertSettings|Current integrations'),
integrationSettings: s__('AlertSettings|Alert settings'),
},
}; };
export const integrationSteps = { export const integrationSteps = {
@ -156,3 +160,31 @@ export const tabIndices = {
}; };
export const testAlertModalId = 'confirmSendTestAlert'; export const testAlertModalId = 'confirmSendTestAlert';
/* Alerts integration settings constants */
export const I18N_ALERT_SETTINGS_FORM = {
saveBtnLabel: __('Save changes'),
introText: __('Action to take when receiving an alert. %{docsLink}'),
introLinkText: __('Learn more.'),
createIncident: {
label: __('Create an incident. Incidents are created for each alert triggered.'),
},
incidentTemplate: {
label: __('Incident template (optional).'),
},
sendEmail: {
label: __('Send a single email notification to Owners and Maintainers for new alerts.'),
},
autoCloseIncidents: {
label: __(
'Automatically close associated incident when a recovery alert notification resolves an alert',
),
},
};
export const NO_ISSUE_TEMPLATE_SELECTED = { key: '', name: __('No template selected') };
export const TAKING_INCIDENT_ACTION_DOCS_LINK =
'/help/operations/metrics/alerts#trigger-actions-from-alerts';
export const ISSUE_TEMPLATES_DOCS_LINK =
'/help/user/project/description_templates#create-an-issue-template';

View file

@ -1,9 +1,15 @@
import { IntrospectionFragmentMatcher } from 'apollo-cache-inmemory';
import produce from 'immer'; import produce from 'immer';
import Vue from 'vue'; import Vue from 'vue';
import VueApollo from 'vue-apollo'; import VueApollo from 'vue-apollo';
import createDefaultClient from '~/lib/graphql'; import createDefaultClient from '~/lib/graphql';
import introspectionQueryResultData from './graphql/fragmentTypes.json';
import getCurrentIntegrationQuery from './graphql/queries/get_current_integration.query.graphql'; import getCurrentIntegrationQuery from './graphql/queries/get_current_integration.query.graphql';
const fragmentMatcher = new IntrospectionFragmentMatcher({
introspectionQueryResultData,
});
Vue.use(VueApollo); Vue.use(VueApollo);
const resolvers = { const resolvers = {
@ -50,7 +56,9 @@ const resolvers = {
export default new VueApollo({ export default new VueApollo({
defaultClient: createDefaultClient(resolvers, { defaultClient: createDefaultClient(resolvers, {
cacheConfig: {}, cacheConfig: {
fragmentMatcher,
},
assumeImmutableResults: true, assumeImmutableResults: true,
}), }),
}); });

View file

@ -0,0 +1 @@
{"__schema":{"types":[{"kind":"UNION","name":"AlertManagementIntegration","possibleTypes":[{"name":"AlertManagementHttpIntegration"},{"name":"AlertManagementPrometheusIntegration"}]}]}}

View file

@ -1,5 +1,6 @@
import { GlToast } from '@gitlab/ui'; import { GlToast } from '@gitlab/ui';
import Vue from 'vue'; import Vue from 'vue';
import IncidentsSettingsService from '~/incidents_settings/incidents_settings_service';
import { parseBoolean } from '~/lib/utils/common_utils'; import { parseBoolean } from '~/lib/utils/common_utils';
import AlertSettingsWrapper from './components/alerts_settings_wrapper.vue'; import AlertSettingsWrapper from './components/alerts_settings_wrapper.vue';
import apolloProvider from './graphql'; import apolloProvider from './graphql';
@ -19,14 +20,37 @@ export default (el) => {
return null; return null;
} }
const { alertsUsageUrl, projectPath, multiIntegrations, alertFields } = el.dataset; const {
alertsUsageUrl,
projectPath,
multiIntegrations,
alertFields,
templates,
createIssue,
issueTemplateKey,
sendEmail,
autoCloseIncident,
pagerdutyResetKeyPath,
operationsSettingsEndpoint,
} = el.dataset;
const service = new IncidentsSettingsService(operationsSettingsEndpoint, pagerdutyResetKeyPath);
return new Vue({ return new Vue({
el, el,
components: { components: {
AlertSettingsWrapper, AlertSettingsWrapper,
}, },
provide: { provide: {
service,
alertSettings: {
templates: JSON.parse(templates),
createIssue: parseBoolean(createIssue),
issueTemplateKey,
sendEmail: parseBoolean(sendEmail),
autoCloseIncident: parseBoolean(autoCloseIncident),
pagerdutyResetKeyPath,
operationsSettingsEndpoint,
},
alertsUsageUrl, alertsUsageUrl,
projectPath, projectPath,
multiIntegrations: parseBoolean(multiIntegrations), multiIntegrations: parseBoolean(multiIntegrations),

View file

@ -1,7 +1,6 @@
<script> <script>
import * as Sentry from '@sentry/browser';
import MetricCard from '~/analytics/shared/components/metric_card.vue'; import MetricCard from '~/analytics/shared/components/metric_card.vue';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import { number } from '~/lib/utils/unit_format'; import { number } from '~/lib/utils/unit_format';
import { s__ } from '~/locale'; import { s__ } from '~/locale';
import usageTrendsCountQuery from '../graphql/queries/usage_trends_count.query.graphql'; import usageTrendsCountQuery from '../graphql/queries/usage_trends_count.query.graphql';
@ -34,8 +33,11 @@ export default {
}); });
}, },
error(error) { error(error) {
createFlash(this.$options.i18n.loadCountsError); createFlash({
Sentry.captureException(error); message: this.$options.i18n.loadCountsError,
captureError: true,
error,
});
}, },
}, },
}, },

View file

@ -1,4 +1,4 @@
import { deprecatedCreateFlash as flash } from '~/flash'; import createFlash from '~/flash';
import { __ } from '~/locale'; import { __ } from '~/locale';
import axios from './lib/utils/axios_utils'; import axios from './lib/utils/axios_utils';
import { joinPaths } from './lib/utils/url_utility'; import { joinPaths } from './lib/utils/url_utility';
@ -18,11 +18,14 @@ const Api = {
groupMembersPath: '/api/:version/groups/:id/members', groupMembersPath: '/api/:version/groups/:id/members',
groupMilestonesPath: '/api/:version/groups/:id/milestones', groupMilestonesPath: '/api/:version/groups/:id/milestones',
subgroupsPath: '/api/:version/groups/:id/subgroups', subgroupsPath: '/api/:version/groups/:id/subgroups',
descendantGroupsPath: '/api/:version/groups/:id/descendant_groups',
namespacesPath: '/api/:version/namespaces.json', namespacesPath: '/api/:version/namespaces.json',
groupInvitationsPath: '/api/:version/groups/:id/invitations', groupInvitationsPath: '/api/:version/groups/:id/invitations',
groupPackagesPath: '/api/:version/groups/:id/packages', groupPackagesPath: '/api/:version/groups/:id/packages',
projectPackagesPath: '/api/:version/projects/:id/packages', projectPackagesPath: '/api/:version/projects/:id/packages',
projectPackagePath: '/api/:version/projects/:id/packages/:package_id', projectPackagePath: '/api/:version/projects/:id/packages/:package_id',
projectPackageFilePath:
'/api/:version/projects/:id/packages/:package_id/package_files/:package_file_id',
groupProjectsPath: '/api/:version/groups/:id/projects.json', groupProjectsPath: '/api/:version/groups/:id/projects.json',
groupSharePath: '/api/:version/groups/:id/share', groupSharePath: '/api/:version/groups/:id/share',
projectsPath: '/api/:version/projects.json', projectsPath: '/api/:version/projects.json',
@ -124,6 +127,15 @@ const Api = {
return axios.delete(url); return axios.delete(url);
}, },
deleteProjectPackageFile(projectId, packageId, fileId) {
const url = Api.buildUrl(this.projectPackageFilePath)
.replace(':id', projectId)
.replace(':package_id', packageId)
.replace(':package_file_id', fileId);
return axios.delete(url);
},
containerRegistryDetails(registryId, options = {}) { containerRegistryDetails(registryId, options = {}) {
const url = Api.buildUrl(this.containerRegistryDetailsPath).replace(':id', registryId); const url = Api.buildUrl(this.containerRegistryDetailsPath).replace(':id', registryId);
return axios.get(url, options); return axios.get(url, options);
@ -443,7 +455,9 @@ const Api = {
}) })
.then(({ data }) => (callback ? callback(data) : data)) .then(({ data }) => (callback ? callback(data) : data))
.catch(() => { .catch(() => {
flash(__('Something went wrong while fetching projects')); createFlash({
message: __('Something went wrong while fetching projects'),
});
if (callback) { if (callback) {
callback(); callback();
} }
@ -631,7 +645,11 @@ const Api = {
params: { ...defaults, ...options }, params: { ...defaults, ...options },
}) })
.then(({ data }) => callback(data)) .then(({ data }) => callback(data))
.catch(() => flash(__('Something went wrong while fetching projects'))); .catch(() =>
createFlash({
message: __('Something went wrong while fetching projects'),
}),
);
}, },
branches(id, query = '', options = {}) { branches(id, query = '', options = {}) {
@ -866,7 +884,7 @@ const Api = {
}, },
trackRedisHllUserEvent(event) { trackRedisHllUserEvent(event) {
if (!gon.features?.usageDataApi) { if (!gon.current_user_id || !gon.features?.usageDataApi) {
return null; return null;
} }

View file

@ -0,0 +1,32 @@
import axios from '~/lib/utils/axios_utils';
import { buildApiUrl } from './api_utils';
const PROJECT_VSA_PATH_BASE = '/:project_path/-/analytics/value_stream_analytics/value_streams';
const PROJECT_VSA_STAGES_PATH = `${PROJECT_VSA_PATH_BASE}/:value_stream_id/stages`;
const buildProjectValueStreamPath = (projectPath, valueStreamId = null) => {
if (valueStreamId) {
return buildApiUrl(PROJECT_VSA_STAGES_PATH)
.replace(':project_path', projectPath)
.replace(':value_stream_id', valueStreamId);
}
return buildApiUrl(PROJECT_VSA_PATH_BASE).replace(':project_path', projectPath);
};
export const getProjectValueStreams = (projectPath) => {
const url = buildProjectValueStreamPath(projectPath);
return axios.get(url);
};
export const getProjectValueStreamStages = (projectPath, valueStreamId) => {
const url = buildProjectValueStreamPath(projectPath, valueStreamId);
return axios.get(url);
};
// NOTE: legacy VSA request use a different path
// the `requestPath` provides a full url for the request
export const getProjectValueStreamStageData = ({ requestPath, stageId, params }) =>
axios.get(`${requestPath}/events/${stageId}`, { params });
export const getProjectValueStreamMetrics = (requestPath, params) =>
axios.get(requestPath, { params });

View file

@ -3,9 +3,9 @@ import { buildApiUrl } from './api_utils';
import { DEFAULT_PER_PAGE } from './constants'; import { DEFAULT_PER_PAGE } from './constants';
const GROUPS_PATH = '/api/:version/groups.json'; const GROUPS_PATH = '/api/:version/groups.json';
const DESCENDANT_GROUPS_PATH = '/api/:version/groups/:id/descendant_groups';
export function getGroups(query, options, callback = () => {}) { const axiosGet = (url, query, options, callback) => {
const url = buildApiUrl(GROUPS_PATH);
return axios return axios
.get(url, { .get(url, {
params: { params: {
@ -19,4 +19,14 @@ export function getGroups(query, options, callback = () => {}) {
return data; return data;
}); });
};
export function getGroups(query, options, callback = () => {}) {
const url = buildApiUrl(GROUPS_PATH);
return axiosGet(url, query, options, callback);
}
export function getDescendentGroups(parentGroupId, query, options, callback = () => {}) {
const url = buildApiUrl(DESCENDANT_GROUPS_PATH.replace(':id', parentGroupId));
return axiosGet(url, query, options, callback);
} }

View file

@ -0,0 +1,11 @@
import axios from '../lib/utils/axios_utils';
import { buildApiUrl } from './api_utils';
const MARKDOWN_PATH = '/api/:version/markdown';
export function getMarkdown(options) {
const url = buildApiUrl(MARKDOWN_PATH);
return axios.post(url, {
...options,
});
}

View file

@ -3,7 +3,7 @@
import { GlLoadingIcon, GlFormInput, GlFormGroup, GlButton } from '@gitlab/ui'; import { GlLoadingIcon, GlFormInput, GlFormGroup, GlButton } from '@gitlab/ui';
import { escape, debounce } from 'lodash'; import { escape, debounce } from 'lodash';
import { mapActions, mapState } from 'vuex'; import { mapActions, mapState } from 'vuex';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import { s__, sprintf } from '~/locale'; import { s__, sprintf } from '~/locale';
import createEmptyBadge from '../empty_badge'; import createEmptyBadge from '../empty_badge';
import Badge from './badge.vue'; import Badge from './badge.vue';
@ -134,26 +134,36 @@ export default {
if (this.isEditing) { if (this.isEditing) {
return this.saveBadge() return this.saveBadge()
.then(() => { .then(() => {
createFlash(s__('Badges|Badge saved.'), 'notice'); createFlash({
message: s__('Badges|Badge saved.'),
type: 'notice',
});
this.wasValidated = false; this.wasValidated = false;
}) })
.catch((error) => { .catch((error) => {
createFlash( createFlash({
s__('Badges|Saving the badge failed, please check the entered URLs and try again.'), message: s__(
); 'Badges|Saving the badge failed, please check the entered URLs and try again.',
),
});
throw error; throw error;
}); });
} }
return this.addBadge() return this.addBadge()
.then(() => { .then(() => {
createFlash(s__('Badges|New badge added.'), 'notice'); createFlash({
message: s__('Badges|New badge added.'),
type: 'notice',
});
this.wasValidated = false; this.wasValidated = false;
}) })
.catch((error) => { .catch((error) => {
createFlash( createFlash({
s__('Badges|Adding the badge failed, please check the entered URLs and try again.'), message: s__(
); 'Badges|Adding the badge failed, please check the entered URLs and try again.',
),
});
throw error; throw error;
}); });
}, },

View file

@ -1,7 +1,7 @@
<script> <script>
import { GlSprintf, GlModal } from '@gitlab/ui'; import { GlSprintf, GlModal } from '@gitlab/ui';
import { mapState, mapActions } from 'vuex'; import { mapState, mapActions } from 'vuex';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import { s__ } from '~/locale'; import { s__ } from '~/locale';
import Badge from './badge.vue'; import Badge from './badge.vue';
import BadgeForm from './badge_form.vue'; import BadgeForm from './badge_form.vue';
@ -40,10 +40,15 @@ export default {
onSubmitModal() { onSubmitModal() {
this.deleteBadge(this.badgeInModal) this.deleteBadge(this.badgeInModal)
.then(() => { .then(() => {
createFlash(s__('Badges|The badge was deleted.'), 'notice'); createFlash({
message: s__('Badges|The badge was deleted.'),
type: 'notice',
});
}) })
.catch((error) => { .catch((error) => {
createFlash(s__('Badges|Deleting the badge failed, please try again.')); createFlash({
message: s__('Badges|Deleting the badge failed, please try again.'),
});
throw error; throw error;
}); });
}, },

View file

@ -46,9 +46,13 @@ export default {
} }
if (this.discussion) { if (this.discussion) {
return sprintf(__("%{authorsName}'s thread"), { return sprintf(
__("%{authorsName}'s thread"),
{
authorsName: this.discussion.notes.find((note) => !note.system).author.name, authorsName: this.discussion.notes.find((note) => !note.system).author.name,
}); },
false,
);
} }
return __('Your new comment'); return __('Your new comment');

View file

@ -41,11 +41,18 @@ export const deleteDraft = ({ commit, getters }, draft) =>
}) })
.catch(() => flash(__('An error occurred while deleting the comment'))); .catch(() => flash(__('An error occurred while deleting the comment')));
export const fetchDrafts = ({ commit, getters }) => export const fetchDrafts = ({ commit, getters, state, dispatch }) =>
service service
.fetchDrafts(getters.getNotesData.draftsPath) .fetchDrafts(getters.getNotesData.draftsPath)
.then((res) => res.data) .then((res) => res.data)
.then((data) => commit(types.SET_BATCH_COMMENTS_DRAFTS, data)) .then((data) => commit(types.SET_BATCH_COMMENTS_DRAFTS, data))
.then(() => {
state.drafts.forEach((draft) => {
if (!draft.line_code) {
dispatch('convertToDiscussion', draft.discussion_id, { root: true });
}
});
})
.catch(() => flash(__('An error occurred while fetching pending comments'))); .catch(() => flash(__('An error occurred while fetching pending comments')));
export const publishSingleDraft = ({ commit, dispatch, getters }, draftId) => { export const publishSingleDraft = ({ commit, dispatch, getters }, draftId) => {

View file

@ -1,4 +1,3 @@
import 'document-register-element';
import { import {
initEmojiMap, initEmojiMap,
getEmojiInfo, getEmojiInfo,

View file

@ -30,6 +30,24 @@ let renderedMermaidBlocks = 0;
let mermaidModule = {}; let mermaidModule = {};
// Whitelist pages where we won't impose any restrictions
// on mermaid rendering
const WHITELISTED_PAGES = [
// 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',
];
export function initMermaid(mermaid) { export function initMermaid(mermaid) {
let theme = 'neutral'; let theme = 'neutral';
@ -46,7 +64,7 @@ export function initMermaid(mermaid) {
theme, theme,
flowchart: { flowchart: {
useMaxWidth: true, useMaxWidth: true,
htmlLabels: false, htmlLabels: true,
}, },
secure: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize', 'htmlLabels'], secure: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize', 'htmlLabels'],
securityLevel: 'strict', securityLevel: 'strict',
@ -121,8 +139,10 @@ function renderMermaidEl(el) {
function renderMermaids($els) { function renderMermaids($els) {
if (!$els.length) return; 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. // A diagram may have been truncated in search results which will cause errors, so abort the render.
if (document.querySelector('body').dataset.page === 'search:show') return; if (pageName === 'search:show') return;
importMermaidModule() importMermaidModule()
.then(() => { .then(() => {
@ -141,10 +161,11 @@ function renderMermaids($els) {
* up the entire thread and causing a DoS. * up the entire thread and causing a DoS.
*/ */
if ( if (
(source && source.length > MAX_CHAR_LIMIT) || !WHITELISTED_PAGES.includes(pageName) &&
((source && source.length > MAX_CHAR_LIMIT) ||
renderedChars > MAX_CHAR_LIMIT || renderedChars > MAX_CHAR_LIMIT ||
renderedMermaidBlocks >= MAX_MERMAID_BLOCK_LIMIT || renderedMermaidBlocks >= MAX_MERMAID_BLOCK_LIMIT ||
shouldLazyLoadMermaidBlock(source) shouldLazyLoadMermaidBlock(source))
) { ) {
const html = ` 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 class="alert gl-alert gl-alert-warning alert-dismissible lazy-render-mermaid-container js-lazy-render-mermaid-container fade show" role="alert">

View file

@ -105,6 +105,12 @@ export const TOGGLE_PERFORMANCE_BAR = {
defaultKeys: ['p b'], // eslint-disable-line @gitlab/require-i18n-strings defaultKeys: ['p b'], // eslint-disable-line @gitlab/require-i18n-strings
}; };
export const HIDE_APPEARING_CONTENT = {
id: 'globalShortcuts.hideAppearingContent',
description: __('Hide tooltips or popovers'),
defaultKeys: ['esc'],
};
export const TOGGLE_CANARY = { export const TOGGLE_CANARY = {
id: 'globalShortcuts.toggleCanary', id: 'globalShortcuts.toggleCanary',
description: __('Toggle GitLab Next'), description: __('Toggle GitLab Next'),
@ -492,6 +498,7 @@ export const GLOBAL_SHORTCUTS_GROUP = {
GO_TO_YOUR_MERGE_REQUESTS, GO_TO_YOUR_MERGE_REQUESTS,
GO_TO_YOUR_TODO_LIST, GO_TO_YOUR_TODO_LIST,
TOGGLE_PERFORMANCE_BAR, TOGGLE_PERFORMANCE_BAR,
HIDE_APPEARING_CONTENT,
], ],
}; };

View file

@ -12,6 +12,7 @@ import {
START_SEARCH, START_SEARCH,
FOCUS_FILTER_BAR, FOCUS_FILTER_BAR,
TOGGLE_PERFORMANCE_BAR, TOGGLE_PERFORMANCE_BAR,
HIDE_APPEARING_CONTENT,
TOGGLE_CANARY, TOGGLE_CANARY,
TOGGLE_MARKDOWN_PREVIEW, TOGGLE_MARKDOWN_PREVIEW,
GO_TO_YOUR_TODO_LIST, GO_TO_YOUR_TODO_LIST,
@ -78,6 +79,7 @@ export default class Shortcuts {
Mousetrap.bind(keysFor(START_SEARCH), Shortcuts.focusSearch); Mousetrap.bind(keysFor(START_SEARCH), Shortcuts.focusSearch);
Mousetrap.bind(keysFor(FOCUS_FILTER_BAR), this.focusFilter.bind(this)); Mousetrap.bind(keysFor(FOCUS_FILTER_BAR), this.focusFilter.bind(this));
Mousetrap.bind(keysFor(TOGGLE_PERFORMANCE_BAR), Shortcuts.onTogglePerfBar); Mousetrap.bind(keysFor(TOGGLE_PERFORMANCE_BAR), Shortcuts.onTogglePerfBar);
Mousetrap.bind(keysFor(HIDE_APPEARING_CONTENT), Shortcuts.hideAppearingContent);
Mousetrap.bind(keysFor(TOGGLE_CANARY), Shortcuts.onToggleCanary); Mousetrap.bind(keysFor(TOGGLE_CANARY), Shortcuts.onToggleCanary);
const findFileURL = document.body.dataset.findFile; const findFileURL = document.body.dataset.findFile;
@ -202,6 +204,18 @@ export default class Shortcuts {
} }
} }
static hideAppearingContent(e) {
const elements = document.querySelectorAll('.tooltip, .popover');
elements.forEach((element) => {
element.style.display = 'none';
});
if (e.preventDefault) {
e.preventDefault();
}
}
/** /**
* Initializes markdown editor shortcuts on the provided `<textarea>` element * Initializes markdown editor shortcuts on the provided `<textarea>` element
* *

View file

@ -0,0 +1,74 @@
<script>
import { GlDropdown, GlDropdownItem } from '@gitlab/ui';
function getHeaderNumber(el) {
return parseInt(el.tagName.match(/\d+/)[0], 10);
}
export default {
components: {
GlDropdown,
GlDropdownItem,
},
data() {
return {
isHidden: false,
items: [],
};
},
mounted() {
this.blobViewer = document.querySelector('.blob-viewer[data-type="rich"]');
this.observer = new MutationObserver(() => {
if (this.blobViewer.classList.contains('hidden')) {
this.isHidden = true;
} else if (this.blobViewer.getAttribute('data-loaded') === 'true') {
this.isHidden = false;
this.generateHeaders();
}
});
if (this.blobViewer) {
this.observer.observe(this.blobViewer, {
attributes: true,
});
}
},
beforeDestroy() {
if (this.observer) {
this.observer.disconnect();
}
},
methods: {
generateHeaders() {
const headers = [...this.blobViewer.querySelectorAll('h1,h2,h3,h4,h5,h6')];
if (headers.length) {
const firstHeader = getHeaderNumber(headers[0]);
headers.forEach((el) => {
this.items.push({
text: el.textContent.trim(),
anchor: el.querySelector('a').getAttribute('id'),
spacing: Math.max((getHeaderNumber(el) - firstHeader) * 8, 0),
});
});
}
},
},
};
</script>
<template>
<gl-dropdown v-if="!isHidden && items.length" icon="list-bulleted" class="gl-mr-2" lazy>
<gl-dropdown-item v-for="(item, index) in items" :key="index" :href="`#${item.anchor}`">
<span
:style="{ 'padding-left': `${item.spacing}px` }"
class="gl-display-block"
data-testid="tableContentsLink"
>
{{ item.text }}
</span>
</gl-dropdown-item>
</gl-dropdown>
</template>

View file

@ -3,7 +3,7 @@
import $ from 'jquery'; import $ from 'jquery';
import initPopover from '~/blob/suggest_gitlab_ci_yml'; import initPopover from '~/blob/suggest_gitlab_ci_yml';
import initCodeQualityWalkthrough from '~/code_quality_walkthrough'; import initCodeQualityWalkthrough from '~/code_quality_walkthrough';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import { disableButtonIfEmptyField, setCookie } from '~/lib/utils/common_utils'; import { disableButtonIfEmptyField, setCookie } from '~/lib/utils/common_utils';
import Tracking from '~/tracking'; import Tracking from '~/tracking';
import BlobFileDropzone from '../blob/blob_file_dropzone'; import BlobFileDropzone from '../blob/blob_file_dropzone';
@ -84,7 +84,11 @@ export default () => {
initPopovers(); initPopovers();
initCodeQualityWalkthroughStep(); initCodeQualityWalkthroughStep();
}) })
.catch((e) => createFlash(e)); .catch((e) =>
createFlash({
message: e,
}),
);
cancelLink.on('click', () => { cancelLink.on('click', () => {
window.onbeforeunload = null; window.onbeforeunload = null;

View file

@ -1,7 +1,7 @@
import $ from 'jquery'; import $ from 'jquery';
import EditorLite from '~/editor/editor_lite'; import EditorLite from '~/editor/editor_lite';
import { FileTemplateExtension } from '~/editor/extensions/editor_file_template_ext'; import { FileTemplateExtension } from '~/editor/extensions/editor_file_template_ext';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import { addEditorMarkdownListeners } from '~/lib/utils/text_markdown'; import { addEditorMarkdownListeners } from '~/lib/utils/text_markdown';
import { insertFinalNewline } from '~/lib/utils/text_utility'; import { insertFinalNewline } from '~/lib/utils/text_utility';
@ -21,7 +21,11 @@ export default class EditBlob {
this.editor.use(new MarkdownExtension()); this.editor.use(new MarkdownExtension());
addEditorMarkdownListeners(this.editor); addEditorMarkdownListeners(this.editor);
}) })
.catch((e) => createFlash(`${BLOB_EDITOR_ERROR}: ${e}`)); .catch((e) =>
createFlash({
message: `${BLOB_EDITOR_ERROR}: ${e}`,
}),
);
} }
this.initModePanesAndLinks(); this.initModePanesAndLinks();
@ -94,7 +98,11 @@ export default class EditBlob {
currentPane.empty().append(data); currentPane.empty().append(data);
currentPane.renderGFM(); currentPane.renderGFM();
}) })
.catch(() => createFlash(BLOB_PREVIEW_ERROR)); .catch(() =>
createFlash({
message: BLOB_PREVIEW_ERROR,
}),
);
} }
this.$toggleButton.show(); this.$toggleButton.show();

View file

@ -1,6 +1,6 @@
import { sortBy, cloneDeep } from 'lodash'; import { sortBy, cloneDeep } from 'lodash';
import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import { ListType, NOT_FILTER, AssigneeIdParamValues } from './constants'; import { ListType } from './constants';
export function getMilestone() { export function getMilestone() {
return null; return null;
@ -40,7 +40,7 @@ export function formatListIssues(listIssues) {
let listItemsCount; let listItemsCount;
const listData = listIssues.nodes.reduce((map, list) => { const listData = listIssues.nodes.reduce((map, list) => {
listItemsCount = list.issues.count; listItemsCount = list.issuesCount;
let sortedIssues = list.issues.edges.map((issueNode) => ({ let sortedIssues = list.issues.edges.map((issueNode) => ({
...issueNode.node, ...issueNode.node,
})); }));
@ -175,45 +175,106 @@ export function isListDraggable(list) {
return list.listType !== ListType.backlog && list.listType !== ListType.closed; return list.listType !== ListType.backlog && list.listType !== ListType.closed;
} }
export function transformNotFilters(filters) { export const FiltersInfo = {
return Object.keys(filters) assigneeUsername: {
.filter((key) => key.startsWith(NOT_FILTER)) negatedSupport: true,
.reduce((obj, key) => { },
return { assigneeId: {
...obj, // assigneeId should be renamed to assigneeWildcardId.
[key.substring(4, key.length - 1)]: filters[key], // Classic boards used 'assigneeId'
}; remap: () => 'assigneeWildcardId',
}, {}); },
} assigneeWildcardId: {
negatedSupport: false,
transform: (val) => val.toUpperCase(),
},
authorUsername: {
negatedSupport: true,
},
labelName: {
negatedSupport: true,
},
milestoneTitle: {
negatedSupport: true,
},
myReactionEmoji: {
negatedSupport: true,
},
releaseTag: {
negatedSupport: true,
},
search: {
negatedSupport: false,
},
};
export function getSupportedParams(filters, supportedFilters) { /**
return supportedFilters.reduce((acc, f) => { * @param {Object} filters - ex. { search: "foobar", "not[authorUsername]": "root", }
/** * @returns {Object} - ex. [ ["search", "foobar", false], ["authorUsername", "root", true], ]
* TODO the API endpoint for the classic boards
* accepts assignee wildcard value as 'assigneeId' param -
* while the GraphQL query accepts the value in 'assigneWildcardId' field.
* Once we deprecate the classics boards,
* we should change the filtered search bar to use 'asssigneeWildcardId' as a token name.
*/ */
if (f === 'assigneeId' && filters[f]) { const parseFilters = (filters) => {
return AssigneeIdParamValues.includes(filters[f]) /* eslint-disable-next-line @gitlab/require-i18n-strings */
const isNegated = (x) => x.startsWith('not[') && x.endsWith(']');
return Object.entries(filters).map(([k, v]) => {
const isNot = isNegated(k);
const filterKey = isNot ? k.slice(4, -1) : k;
return [filterKey, v, isNot];
});
};
/**
* Returns an object of filter key/value pairs used as variables in GraphQL requests.
* (warning: filter values are not validated)
*
* @param {Object} objParam.filters - filters extracted from url params. ex. { search: "foobar", "not[authorUsername]": "root", }
* @param {string} objParam.issuableType - issuable type e.g., issue.
* @param {Object} objParam.filterInfo - data on filters such as how to transform filter value, if filter can be negated, etc.
* @param {Object} objParam.filterFields - data on what filters are available for given issuableType (based on GraphQL schema)
*/
export const filterVariables = ({ filters, issuableType, filterInfo, filterFields }) =>
parseFilters(filters)
.map(([k, v, negated]) => {
// for legacy reasons, some filters need to be renamed to correct GraphQL fields.
const remapAvailable = filterInfo[k]?.remap;
const remappedKey = remapAvailable ? filterInfo[k].remap(k, v) : k;
return [remappedKey, v, negated];
})
.filter(([k, , negated]) => {
// remove unsupported filters (+ check if the filters support negation)
const supported = filterFields[issuableType].includes(k);
if (supported) {
return negated ? filterInfo[k].negatedSupport : true;
}
return false;
})
.map(([k, v, negated]) => {
// if the filter value needs a special transformation, apply it (e.g., capitalization)
const transform = filterInfo[k]?.transform;
const newVal = transform ? transform(v) : v;
return [k, newVal, negated];
})
.reduce(
(acc, [k, v, negated]) => {
return negated
? { ? {
...acc, ...acc,
assigneeWildcardId: filters[f].toUpperCase(), not: {
...acc.not,
[k]: v,
},
} }
: acc; : {
}
if (filters[f]) {
return {
...acc, ...acc,
[f]: filters[f], [k]: v,
}; };
} },
{ not: {} },
return acc; );
}, {});
}
// EE-specific feature. Find the implementation in the `ee/`-folder // EE-specific feature. Find the implementation in the `ee/`-folder
export function transformBoardConfig() { export function transformBoardConfig() {
@ -228,5 +289,4 @@ export default {
fullLabelId, fullLabelId,
fullIterationId, fullIterationId,
isListDraggable, isListDraggable,
transformNotFilters,
}; };

View file

@ -1,21 +1,25 @@
<script> <script>
import { GlButton } from '@gitlab/ui'; import { GlButton } from '@gitlab/ui';
import { mapActions } from 'vuex'; import { mapActions } from 'vuex';
import Tracking from '~/tracking';
export default { export default {
components: { components: {
GlButton, GlButton,
}, },
mixins: [Tracking.mixin()],
methods: { methods: {
...mapActions(['setAddColumnFormVisibility']), ...mapActions(['setAddColumnFormVisibility']),
handleClick() {
this.setAddColumnFormVisibility(true);
this.track('click_button', { label: 'create_list' });
},
}, },
}; };
</script> </script>
<template> <template>
<div class="gl-ml-3 gl-display-flex gl-align-items-center" data-testid="boards-create-list"> <div class="gl-ml-3 gl-display-flex gl-align-items-center" data-testid="boards-create-list">
<gl-button variant="confirm" @click="setAddColumnFormVisibility(true)" <gl-button variant="confirm" @click="handleClick">{{ __('Create list') }} </gl-button>
>{{ __('Create list') }}
</gl-button>
</div> </div>
</template> </template>

View file

@ -1,5 +1,6 @@
<script> <script>
import { mapActions, mapState } from 'vuex'; import { mapActions, mapState } from 'vuex';
import Tracking from '~/tracking';
import BoardCardInner from './board_card_inner.vue'; import BoardCardInner from './board_card_inner.vue';
export default { export default {
@ -7,6 +8,7 @@ export default {
components: { components: {
BoardCardInner, BoardCardInner,
}, },
mixins: [Tracking.mixin()],
props: { props: {
list: { list: {
type: Object, type: Object,
@ -40,6 +42,12 @@ export default {
this.selectedBoardItems.findIndex((boardItem) => boardItem.id === this.item.id) > -1 this.selectedBoardItems.findIndex((boardItem) => boardItem.id === this.item.id) > -1
); );
}, },
isDisabled() {
return this.disabled || !this.item.id || this.item.isLoading;
},
isDraggable() {
return !this.disabled && this.item.id && !this.item.isLoading;
},
}, },
methods: { methods: {
...mapActions(['toggleBoardItemMultiSelection', 'toggleBoardItem']), ...mapActions(['toggleBoardItemMultiSelection', 'toggleBoardItem']),
@ -48,10 +56,11 @@ export default {
if (e.target.closest('.js-no-trigger')) return; if (e.target.closest('.js-no-trigger')) return;
const isMultiSelect = e.ctrlKey || e.metaKey; const isMultiSelect = e.ctrlKey || e.metaKey;
if (isMultiSelect) { if (isMultiSelect && gon?.features?.boardMultiSelect) {
this.toggleBoardItemMultiSelection(this.item); this.toggleBoardItemMultiSelection(this.item);
} else { } else {
this.toggleBoardItem({ boardItem: this.item }); this.toggleBoardItem({ boardItem: this.item });
this.track('click_card', { label: 'right_sidebar' });
} }
}, },
}, },
@ -63,9 +72,10 @@ export default {
data-qa-selector="board_card" data-qa-selector="board_card"
:class="{ :class="{
'multi-select': multiSelectVisible, 'multi-select': multiSelectVisible,
'user-can-drag': !disabled && item.id, 'user-can-drag': isDraggable,
'is-disabled': disabled || !item.id, 'is-disabled': isDisabled,
'is-active': isActive, 'is-active': isActive,
'gl-cursor-not-allowed gl-bg-gray-10': item.isLoading,
}" }"
:index="index" :index="index"
:data-item-id="item.id" :data-item-id="item.id"

View file

@ -1,5 +1,5 @@
<script> <script>
import { GlLabel, GlTooltipDirective, GlIcon } from '@gitlab/ui'; import { GlLabel, GlTooltipDirective, GlIcon, GlLoadingIcon } from '@gitlab/ui';
import { sortBy } from 'lodash'; import { sortBy } from 'lodash';
import { mapActions, mapGetters, mapState } from 'vuex'; import { mapActions, mapGetters, mapState } from 'vuex';
import boardCardInner from 'ee_else_ce/boards/mixins/board_card_inner'; import boardCardInner from 'ee_else_ce/boards/mixins/board_card_inner';
@ -17,6 +17,7 @@ import IssueTimeEstimate from './issue_time_estimate.vue';
export default { export default {
components: { components: {
GlLabel, GlLabel,
GlLoadingIcon,
GlIcon, GlIcon,
UserAvatarLink, UserAvatarLink,
TooltipOnTruncate, TooltipOnTruncate,
@ -181,9 +182,13 @@ export default {
class="confidential-icon gl-mr-2" class="confidential-icon gl-mr-2"
:aria-label="__('Confidential')" :aria-label="__('Confidential')"
/> />
<a :href="item.path || item.webUrl || ''" :title="item.title" @mousemove.stop>{{ <a
item.title :href="item.path || item.webUrl || ''"
}}</a> :title="item.title"
:class="{ 'gl-text-gray-400!': item.isLoading }"
@mousemove.stop
>{{ item.title }}</a
>
</h4> </h4>
</div> </div>
<div v-if="showLabelFooter" class="board-card-labels gl-mt-2 gl-display-flex gl-flex-wrap"> <div v-if="showLabelFooter" class="board-card-labels gl-mt-2 gl-display-flex gl-flex-wrap">
@ -206,6 +211,7 @@ export default {
<div <div
class="gl-display-flex align-items-start flex-wrap-reverse board-card-number-container gl-overflow-hidden js-board-card-number-container" class="gl-display-flex align-items-start flex-wrap-reverse board-card-number-container gl-overflow-hidden js-board-card-number-container"
> >
<gl-loading-icon v-if="item.isLoading" size="md" class="mt-3" />
<span <span
v-if="item.referencePath" v-if="item.referencePath"
class="board-card-number gl-overflow-hidden gl-display-flex gl-mr-3 gl-mt-3" class="board-card-number gl-overflow-hidden gl-display-flex gl-mr-3 gl-mt-3"

View file

@ -24,11 +24,6 @@ export default {
type: Boolean, type: Boolean,
required: true, required: true,
}, },
canAdminList: {
type: Boolean,
required: false,
default: false,
},
}, },
computed: { computed: {
...mapState(['filterParams', 'highlightedLists']), ...mapState(['filterParams', 'highlightedLists']),
@ -92,14 +87,8 @@ export default {
class="board-inner gl-display-flex gl-flex-direction-column gl-relative gl-h-full gl-rounded-base" class="board-inner gl-display-flex gl-flex-direction-column gl-relative gl-h-full gl-rounded-base"
:class="{ 'board-column-highlighted': highlighted }" :class="{ 'board-column-highlighted': highlighted }"
> >
<board-list-header :can-admin-list="canAdminList" :list="list" :disabled="disabled" /> <board-list-header :list="list" :disabled="disabled" />
<board-list <board-list ref="board-list" :disabled="disabled" :board-items="listItems" :list="list" />
ref="board-list"
:disabled="disabled"
:board-items="listItems"
:list="list"
:can-admin-list="canAdminList"
/>
</div> </div>
</div> </div>
</template> </template>

View file

@ -26,11 +26,6 @@ export default {
type: Boolean, type: Boolean,
required: true, required: true,
}, },
canAdminList: {
type: Boolean,
required: false,
default: false,
},
}, },
data() { data() {
return { return {
@ -110,7 +105,7 @@ export default {
class="board-inner gl-display-flex gl-flex-direction-column gl-relative gl-h-full gl-rounded-base" class="board-inner gl-display-flex gl-flex-direction-column gl-relative gl-h-full gl-rounded-base"
:class="{ 'board-column-highlighted': list.highlighted }" :class="{ 'board-column-highlighted': list.highlighted }"
> >
<board-list-header :can-admin-list="canAdminList" :list="list" :disabled="disabled" /> <board-list-header :list="list" :disabled="disabled" />
<board-list ref="board-list" :disabled="disabled" :issues="listIssues" :list="list" /> <board-list ref="board-list" :disabled="disabled" :issues="listIssues" :list="list" />
</div> </div>
</div> </div>

View file

@ -106,7 +106,6 @@ export default {
v-for="(list, index) in boardListsToUse" v-for="(list, index) in boardListsToUse"
:key="index" :key="index"
ref="board" ref="board"
:can-admin-list="canAdminList"
:list="list" :list="list"
:disabled="disabled" :disabled="disabled"
/> />

View file

@ -1,16 +1,17 @@
<script> <script>
import { GlDrawer } from '@gitlab/ui'; import { GlDrawer } from '@gitlab/ui';
import { mapState, mapActions, mapGetters } from 'vuex'; import { mapState, mapActions, mapGetters } from 'vuex';
import BoardSidebarDueDate from '~/boards/components/sidebar/board_sidebar_due_date.vue'; import SidebarDropdownWidget from 'ee_else_ce/sidebar/components/sidebar_dropdown_widget.vue';
import BoardSidebarLabelsSelect from '~/boards/components/sidebar/board_sidebar_labels_select.vue'; import BoardSidebarLabelsSelect from '~/boards/components/sidebar/board_sidebar_labels_select.vue';
import BoardSidebarMilestoneSelect from '~/boards/components/sidebar/board_sidebar_milestone_select.vue';
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 } from '~/boards/constants';
import { contentTop } from '~/lib/utils/common_utils'; import { contentTop } from '~/lib/utils/common_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 SidebarSubscriptionsWidget from '~/sidebar/components/subscriptions/sidebar_subscriptions_widget.vue'; import SidebarSubscriptionsWidget from '~/sidebar/components/subscriptions/sidebar_subscriptions_widget.vue';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
export default { export default {
headerHeight: `${contentTop()}px`, headerHeight: `${contentTop()}px`,
@ -18,19 +19,18 @@ export default {
GlDrawer, GlDrawer,
BoardSidebarTitle, BoardSidebarTitle,
SidebarAssigneesWidget, SidebarAssigneesWidget,
SidebarDateWidget,
SidebarConfidentialityWidget, SidebarConfidentialityWidget,
BoardSidebarTimeTracker, BoardSidebarTimeTracker,
BoardSidebarLabelsSelect, BoardSidebarLabelsSelect,
BoardSidebarDueDate,
SidebarSubscriptionsWidget, SidebarSubscriptionsWidget,
BoardSidebarMilestoneSelect, SidebarDropdownWidget,
BoardSidebarEpicSelect: () =>
import('ee_component/boards/components/sidebar/board_sidebar_epic_select.vue'),
BoardSidebarWeightInput: () => BoardSidebarWeightInput: () =>
import('ee_component/boards/components/sidebar/board_sidebar_weight_input.vue'), import('ee_component/boards/components/sidebar/board_sidebar_weight_input.vue'),
SidebarIterationWidget: () => IterationSidebarDropdownWidget: () =>
import('ee_component/sidebar/components/sidebar_iteration_widget.vue'), import('ee_component/sidebar/components/iteration_sidebar_dropdown_widget.vue'),
}, },
mixins: [glFeatureFlagMixin()],
inject: { inject: {
multipleAssigneesFeatureAvailable: { multipleAssigneesFeatureAvailable: {
default: false, default: false,
@ -89,20 +89,57 @@ export default {
:allow-multiple-assignees="multipleAssigneesFeatureAvailable" :allow-multiple-assignees="multipleAssigneesFeatureAvailable"
@assignees-updated="setAssignees" @assignees-updated="setAssignees"
/> />
<board-sidebar-epic-select v-if="epicFeatureAvailable" class="epic" /> <sidebar-dropdown-widget
v-if="epicFeatureAvailable"
:iid="activeBoardItem.iid"
issuable-attribute="epic"
:workspace-path="projectPathForActiveIssue"
:attr-workspace-path="groupPathForActiveIssue"
:issuable-type="issuableType"
data-testid="sidebar-epic"
/>
<div> <div>
<board-sidebar-milestone-select /> <sidebar-dropdown-widget
<sidebar-iteration-widget :iid="activeBoardItem.iid"
issuable-attribute="milestone"
:workspace-path="projectPathForActiveIssue"
:attr-workspace-path="projectPathForActiveIssue"
:issuable-type="issuableType"
data-testid="sidebar-milestones"
/>
<template v-if="!glFeatures.iterationCadences">
<sidebar-dropdown-widget
v-if="iterationFeatureAvailable"
:iid="activeBoardItem.iid"
issuable-attribute="iteration"
:workspace-path="projectPathForActiveIssue"
:attr-workspace-path="groupPathForActiveIssue"
:issuable-type="issuableType"
class="gl-mt-5"
data-testid="iteration-edit"
data-qa-selector="iteration_container"
/>
</template>
<template v-else>
<iteration-sidebar-dropdown-widget
v-if="iterationFeatureAvailable" v-if="iterationFeatureAvailable"
:iid="activeBoardItem.iid" :iid="activeBoardItem.iid"
:workspace-path="projectPathForActiveIssue" :workspace-path="projectPathForActiveIssue"
:iterations-workspace-path="groupPathForActiveIssue" :attr-workspace-path="groupPathForActiveIssue"
:issuable-type="issuableType" :issuable-type="issuableType"
class="gl-mt-5" class="gl-mt-5"
data-testid="iteration-edit"
data-qa-selector="iteration_container"
/> />
</template>
</div> </div>
<board-sidebar-time-tracker class="swimlanes-sidebar-time-tracker" /> <board-sidebar-time-tracker class="swimlanes-sidebar-time-tracker" />
<board-sidebar-due-date /> <sidebar-date-widget
:iid="activeBoardItem.iid"
:full-path="fullPath"
:issuable-type="issuableType"
data-testid="sidebar-due-date"
/>
<board-sidebar-labels-select class="labels" /> <board-sidebar-labels-select class="labels" />
<board-sidebar-weight-input v-if="weightFeatureAvailable" class="weight" /> <board-sidebar-weight-input v-if="weightFeatureAvailable" class="weight" />
<sidebar-confidentiality-widget <sidebar-confidentiality-widget

View file

@ -3,6 +3,7 @@ import { pickBy } from 'lodash';
import { mapActions } from 'vuex'; import { mapActions } from 'vuex';
import { updateHistory, setUrlParams } from '~/lib/utils/url_utility'; 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 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';
export default { export default {
@ -104,7 +105,9 @@ export default {
}, },
getFilterParams(filters = []) { getFilterParams(filters = []) {
const notFilters = filters.filter((item) => item.value.operator === '!='); const notFilters = filters.filter((item) => item.value.operator === '!=');
const equalsFilters = filters.filter((item) => item.value.operator === '='); const equalsFilters = filters.filter(
(item) => item?.value?.operator === '=' || item.type === FILTERED_SEARCH_TERM,
);
return { ...this.generateParams(equalsFilters), not: { ...this.generateParams(notFilters) } }; return { ...this.generateParams(equalsFilters), not: { ...this.generateParams(notFilters) } };
}, },

View file

@ -1,7 +1,7 @@
<script> <script>
import { GlModal } from '@gitlab/ui'; import { GlModal, GlAlert } from '@gitlab/ui';
import { mapGetters } from 'vuex'; import { mapGetters, mapActions, mapState } from 'vuex';
import { deprecatedCreateFlash as Flash } from '~/flash'; import ListLabel from '~/boards/models/label';
import { convertToGraphQLId } from '~/graphql_shared/utils'; import { convertToGraphQLId } from '~/graphql_shared/utils';
import { getParameterByName } from '~/lib/utils/common_utils'; import { getParameterByName } from '~/lib/utils/common_utils';
import { visitUrl } from '~/lib/utils/url_utility'; import { visitUrl } from '~/lib/utils/url_utility';
@ -44,6 +44,7 @@ export default {
BoardScope: () => import('ee_component/boards/components/board_scope.vue'), BoardScope: () => import('ee_component/boards/components/board_scope.vue'),
GlModal, GlModal,
BoardConfigurationOptions, BoardConfigurationOptions,
GlAlert,
}, },
inject: { inject: {
fullPath: { fullPath: {
@ -107,6 +108,7 @@ export default {
}; };
}, },
computed: { computed: {
...mapState(['error']),
...mapGetters(['isIssueBoard', 'isGroupBoard', 'isProjectBoard']), ...mapGetters(['isIssueBoard', 'isGroupBoard', 'isProjectBoard']),
isNewForm() { isNewForm() {
return this.currentPage === formType.new; return this.currentPage === formType.new;
@ -222,9 +224,7 @@ export default {
} }
}, },
methods: { methods: {
setIteration(iterationId) { ...mapActions(['setError', 'unsetError']),
this.board.iteration_id = iterationId;
},
boardCreateResponse(data) { boardCreateResponse(data) {
return data.createBoard.board.webPath; return data.createBoard.board.webPath;
}, },
@ -235,6 +235,9 @@ export default {
: ''; : '';
return `${path}${param}`; return `${path}${param}`;
}, },
cancel() {
this.$emit('cancel');
},
async createOrUpdateBoard() { async createOrUpdateBoard() {
const response = await this.$apollo.mutate({ const response = await this.$apollo.mutate({
mutation: this.currentMutation, mutation: this.currentMutation,
@ -263,7 +266,7 @@ export default {
await this.deleteBoard(); await this.deleteBoard();
visitUrl(this.rootPath); visitUrl(this.rootPath);
} catch { } catch {
Flash(this.$options.i18n.deleteErrorMessage); this.setError({ message: this.$options.i18n.deleteErrorMessage });
} finally { } finally {
this.isLoading = false; this.isLoading = false;
} }
@ -272,15 +275,12 @@ export default {
const url = await this.createOrUpdateBoard(); const url = await this.createOrUpdateBoard();
visitUrl(url); visitUrl(url);
} catch { } catch {
Flash(this.$options.i18n.saveErrorMessage); this.setError({ message: this.$options.i18n.saveErrorMessage });
} finally { } finally {
this.isLoading = false; this.isLoading = false;
} }
} }
}, },
cancel() {
this.$emit('cancel');
},
resetFormState() { resetFormState() {
if (this.isNewForm) { if (this.isNewForm) {
// Clear the form when we open the "New board" modal // Clear the form when we open the "New board" modal
@ -289,6 +289,25 @@ export default {
this.board = { ...boardDefaults, ...this.currentBoard }; this.board = { ...boardDefaults, ...this.currentBoard };
} }
}, },
setIteration(iterationId) {
this.board.iteration_id = iterationId;
},
setBoardLabels(labels) {
labels.forEach((label) => {
if (label.set && !this.board.labels.find((l) => l.id === label.id)) {
this.board.labels.push(
new ListLabel({
id: label.id,
title: label.title,
color: label.color,
textColor: label.text_color,
}),
);
} else if (!label.set) {
this.board.labels = this.board.labels.filter((selected) => selected.id !== label.id);
}
});
},
}, },
}; };
</script> </script>
@ -308,6 +327,15 @@ export default {
@close="cancel" @close="cancel"
@hide.prevent @hide.prevent
> >
<gl-alert
v-if="error"
class="gl-mb-3"
variant="danger"
:dismissible="true"
@dismiss="unsetError"
>
{{ error }}
</gl-alert>
<p v-if="isDeleteForm" data-testid="delete-confirmation-message"> <p v-if="isDeleteForm" data-testid="delete-confirmation-message">
{{ $options.i18n.deleteConfirmationMessage }} {{ $options.i18n.deleteConfirmationMessage }}
</p> </p>
@ -346,6 +374,7 @@ export default {
:group-id="groupId" :group-id="groupId"
:weights="weights" :weights="weights"
@set-iteration="setIteration" @set-iteration="setIteration"
@set-board-labels="setBoardLabels"
/> />
</form> </form>
</gl-modal> </gl-modal>

View file

@ -1,10 +1,11 @@
<script> <script>
import { GlLoadingIcon } from '@gitlab/ui'; import { GlLoadingIcon, GlIntersectionObserver } from '@gitlab/ui';
import Draggable from 'vuedraggable'; import Draggable from 'vuedraggable';
import { mapActions, mapGetters, mapState } from 'vuex'; import { mapActions, mapGetters, mapState } from 'vuex';
import { sortableStart, sortableEnd } from '~/boards/mixins/sortable_default_options'; import { sortableStart, sortableEnd } from '~/boards/mixins/sortable_default_options';
import { sprintf, __ } from '~/locale'; import { sprintf, __ } from '~/locale';
import defaultSortableConfig from '~/sortable/sortable_config'; import defaultSortableConfig from '~/sortable/sortable_config';
import Tracking from '~/tracking';
import eventHub from '../eventhub'; import eventHub from '../eventhub';
import BoardCard from './board_card.vue'; import BoardCard from './board_card.vue';
import BoardNewIssue from './board_new_issue.vue'; import BoardNewIssue from './board_new_issue.vue';
@ -21,6 +22,13 @@ export default {
BoardCard, BoardCard,
BoardNewIssue, BoardNewIssue,
GlLoadingIcon, GlLoadingIcon,
GlIntersectionObserver,
},
mixins: [Tracking.mixin()],
inject: {
canAdminList: {
default: false,
},
}, },
props: { props: {
disabled: { disabled: {
@ -35,11 +43,6 @@ export default {
type: Array, type: Array,
required: true, required: true,
}, },
canAdminList: {
type: Boolean,
required: false,
default: false,
},
}, },
data() { data() {
return { return {
@ -65,7 +68,7 @@ export default {
return this.list.maxIssueCount > 0 && this.listItemsCount > this.list.maxIssueCount; return this.list.maxIssueCount > 0 && this.listItemsCount > this.list.maxIssueCount;
}, },
hasNextPage() { hasNextPage() {
return this.pageInfoByListId[this.list.id].hasNextPage; return this.pageInfoByListId[this.list.id]?.hasNextPage;
}, },
loading() { loading() {
return this.listsFlags[this.list.id]?.isLoading; return this.listsFlags[this.list.id]?.isLoading;
@ -86,7 +89,9 @@ export default {
: this.$options.i18n.showingAllIssues; : this.$options.i18n.showingAllIssues;
}, },
treeRootWrapper() { treeRootWrapper() {
return this.canAdminList ? Draggable : 'ul'; return this.canAdminList && !this.listsFlags[this.list.id]?.addItemToListInProgress
? Draggable
: 'ul';
}, },
treeRootOptions() { treeRootOptions() {
const options = { const options = {
@ -108,19 +113,21 @@ export default {
this.showCount = this.scrollHeight() > Math.ceil(this.listHeight()); this.showCount = this.scrollHeight() > Math.ceil(this.listHeight());
}); });
}, },
}, 'list.id': {
created() { handler(id, oldVal) {
if (id) {
eventHub.$on(`toggle-issue-form-${this.list.id}`, this.toggleForm); eventHub.$on(`toggle-issue-form-${this.list.id}`, this.toggleForm);
eventHub.$on(`scroll-board-list-${this.list.id}`, this.scrollToTop); eventHub.$on(`scroll-board-list-${this.list.id}`, this.scrollToTop);
eventHub.$off(`toggle-issue-form-${oldVal}`, this.toggleForm);
eventHub.$off(`scroll-board-list-${oldVal}`, this.scrollToTop);
}
},
immediate: true,
}, },
mounted() {
// Scroll event on list to load more
this.listRef.addEventListener('scroll', this.onScroll);
}, },
beforeDestroy() { beforeDestroy() {
eventHub.$off(`toggle-issue-form-${this.list.id}`, this.toggleForm); eventHub.$off(`toggle-issue-form-${this.list.id}`, this.toggleForm);
eventHub.$off(`scroll-board-list-${this.list.id}`, this.scrollToTop); eventHub.$off(`scroll-board-list-${this.list.id}`, this.scrollToTop);
this.listRef.removeEventListener('scroll', this.onScroll);
}, },
methods: { methods: {
...mapActions(['fetchItemsForList', 'moveItem']), ...mapActions(['fetchItemsForList', 'moveItem']),
@ -142,28 +149,31 @@ export default {
toggleForm() { toggleForm() {
this.showIssueForm = !this.showIssueForm; this.showIssueForm = !this.showIssueForm;
}, },
onScroll() { onReachingListBottom() {
window.requestAnimationFrame(() => { if (!this.loadingMore && this.hasNextPage) {
if ( this.showCount = true;
!this.loadingMore &&
this.scrollTop() > this.scrollHeight() - this.scrollOffset &&
this.hasNextPage
) {
this.loadNextPage(); this.loadNextPage();
} }
});
}, },
handleDragOnStart() { handleDragOnStart() {
sortableStart(); sortableStart();
this.track('drag_card', { label: 'board' });
}, },
handleDragOnEnd(params) { handleDragOnEnd(params) {
sortableEnd(); sortableEnd();
const { newIndex, oldIndex, from, to, item } = params; const { oldIndex, from, to, item } = params;
let { newIndex } = params;
const { itemId, itemIid, itemPath } = item.dataset; const { itemId, itemIid, itemPath } = item.dataset;
const { children } = to; let { children } = to;
let moveBeforeId; let moveBeforeId;
let moveAfterId; let moveAfterId;
children = Array.from(children).filter((card) => card.classList.contains('board-card'));
if (newIndex > children.length) {
newIndex = children.length;
}
const getItemId = (el) => Number(el.dataset.itemId); const getItemId = (el) => Number(el.dataset.itemId);
// If item is being moved within the same list // If item is being moved within the same list
@ -226,6 +236,7 @@ export default {
:data-board="list.id" :data-board="list.id"
:data-board-type="list.listType" :data-board-type="list.listType"
:class="{ 'bg-danger-100': boardItemsSizeExceedsMax }" :class="{ 'bg-danger-100': boardItemsSizeExceedsMax }"
draggable=".board-card"
class="board-list gl-w-full gl-h-full gl-list-style-none gl-mb-0 gl-p-2 js-board-list" class="board-list gl-w-full gl-h-full gl-list-style-none gl-mb-0 gl-p-2 js-board-list"
data-testid="tree-root-wrapper" data-testid="tree-root-wrapper"
@start="handleDragOnStart" @start="handleDragOnStart"
@ -240,6 +251,7 @@ export default {
:item="item" :item="item"
:disabled="disabled" :disabled="disabled"
/> />
<gl-intersection-observer @appear="onReachingListBottom">
<li v-if="showCount" class="board-list-count gl-text-center" data-issue-id="-1"> <li v-if="showCount" class="board-list-count gl-text-center" data-issue-id="-1">
<gl-loading-icon <gl-loading-icon
v-if="loadingMore" v-if="loadingMore"
@ -249,6 +261,7 @@ export default {
<span v-if="showingAllItems">{{ showingAllItemsText }}</span> <span v-if="showingAllItems">{{ showingAllItemsText }}</span>
<span v-else>{{ paginatedIssueText }}</span> <span v-else>{{ paginatedIssueText }}</span>
</li> </li>
</gl-intersection-observer>
</component> </component>
</div> </div>
</template> </template>

View file

@ -1,7 +1,7 @@
<script> <script>
import { GlLoadingIcon } from '@gitlab/ui'; import { GlLoadingIcon } from '@gitlab/ui';
import { Sortable, MultiDrag } from 'sortablejs'; import { Sortable, MultiDrag } from 'sortablejs';
import { deprecatedCreateFlash as createFlash } from '~/flash'; import createFlash from '~/flash';
import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants'; import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants';
import { sprintf, __ } from '~/locale'; import { sprintf, __ } from '~/locale';
import eventHub from '../eventhub'; import eventHub from '../eventhub';
@ -91,6 +91,13 @@ export default {
} }
}); });
}, },
'list.id': {
handler(id) {
if (id) {
eventHub.$on(`toggle-issue-form-${this.list.id}`, this.toggleForm);
}
},
},
}, },
created() { created() {
eventHub.$on(`toggle-issue-form-${this.list.id}`, this.toggleForm); eventHub.$on(`toggle-issue-form-${this.list.id}`, this.toggleForm);
@ -295,7 +302,9 @@ export default {
} }
if (!toList) { if (!toList) {
createFlash(__('Something went wrong while performing the action.')); createFlash({
message: __('Something went wrong while performing the action.'),
});
} }
if (!isSameList) { if (!isSameList) {

View file

@ -14,6 +14,7 @@ import { isScopedLabel, parseBoolean } from '~/lib/utils/common_utils';
import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants'; import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants';
import { n__, s__, __ } from '~/locale'; import { n__, s__, __ } from '~/locale';
import sidebarEventHub from '~/sidebar/event_hub'; import sidebarEventHub from '~/sidebar/event_hub';
import Tracking from '~/tracking';
import AccessorUtilities from '../../lib/utils/accessor'; import AccessorUtilities from '../../lib/utils/accessor';
import { inactiveId, LIST, ListType } from '../constants'; import { inactiveId, LIST, ListType } from '../constants';
import eventHub from '../eventhub'; import eventHub from '../eventhub';
@ -38,6 +39,7 @@ export default {
directives: { directives: {
GlTooltip: GlTooltipDirective, GlTooltip: GlTooltipDirective,
}, },
mixins: [Tracking.mixin()],
inject: { inject: {
boardId: { boardId: {
default: '', default: '',
@ -98,6 +100,12 @@ export default {
showListDetails() { showListDetails() {
return !this.list.collapsed || !this.isSwimlanesHeader; return !this.list.collapsed || !this.isSwimlanesHeader;
}, },
showListHeaderActions() {
if (this.isLoggedIn) {
return this.isNewIssueShown || this.isSettingsShown;
}
return false;
},
itemsCount() { itemsCount() {
return this.list.issuesCount; return this.list.issuesCount;
}, },
@ -149,6 +157,8 @@ export default {
} }
this.setActiveId({ id: this.list.id, sidebarType: LIST }); this.setActiveId({ id: this.list.id, sidebarType: LIST });
this.track('click_button', { label: 'list_settings' });
}, },
showScopedLabels(label) { showScopedLabels(label) {
return this.scopedLabelsAvailable && isScopedLabel(label); return this.scopedLabelsAvailable && isScopedLabel(label);
@ -170,6 +180,11 @@ export default {
// When expanding/collapsing, the tooltip on the caret button sometimes stays open. // When expanding/collapsing, the tooltip on the caret button sometimes stays open.
// Close all tooltips manually to prevent dangling tooltips. // Close all tooltips manually to prevent dangling tooltips.
this.$root.$emit(BV_HIDE_TOOLTIP); this.$root.$emit(BV_HIDE_TOOLTIP);
this.track('click_toggle_button', {
label: 'toggle_list',
property: collapsed ? 'closed' : 'open',
});
}, },
addToLocalStorage() { addToLocalStorage() {
if (AccessorUtilities.isLocalStorageAccessSafe()) { if (AccessorUtilities.isLocalStorageAccessSafe()) {
@ -351,10 +366,7 @@ export default {
<!-- EE end --> <!-- EE end -->
</span> </span>
</div> </div>
<gl-button-group <gl-button-group v-if="showListHeaderActions" class="board-list-button-group gl-pl-2">
v-if="isNewIssueShown || isSettingsShown"
class="board-list-button-group pl-2"
>
<gl-button <gl-button
v-if="isNewIssueShown" v-if="isNewIssueShown"
v-show="!list.collapsed" v-show="!list.collapsed"

View file

@ -35,6 +35,9 @@ export default {
GlTooltip: GlTooltipDirective, GlTooltip: GlTooltipDirective,
}, },
inject: { inject: {
currentUserId: {
default: null,
},
boardId: { boardId: {
default: '', default: '',
}, },
@ -63,7 +66,7 @@ export default {
computed: { computed: {
...mapState(['activeId']), ...mapState(['activeId']),
isLoggedIn() { isLoggedIn() {
return Boolean(gon.current_user_id); return Boolean(this.currentUserId);
}, },
listType() { listType() {
return this.list.type; return this.list.type;
@ -89,6 +92,12 @@ export default {
showListDetails() { showListDetails() {
return this.list.isExpanded || !this.isSwimlanesHeader; return this.list.isExpanded || !this.isSwimlanesHeader;
}, },
showListHeaderActions() {
if (this.isLoggedIn) {
return this.isNewIssueShown || this.isSettingsShown;
}
return false;
},
issuesCount() { issuesCount() {
return this.list.issuesSize; return this.list.issuesSize;
}, },
@ -320,10 +329,7 @@ export default {
</template> </template>
</span> </span>
</div> </div>
<gl-button-group <gl-button-group v-if="showListHeaderActions" class="board-list-button-group pl-2">
v-if="isNewIssueShown || isSettingsShown"
class="board-list-button-group pl-2"
>
<gl-button <gl-button
v-if="isNewIssueShown" v-if="isNewIssueShown"
ref="newIssueBtn" ref="newIssueBtn"

View file

@ -102,7 +102,7 @@ export default {
ref="submitButton" ref="submitButton"
:disabled="disabled" :disabled="disabled"
class="float-left js-no-auto-disable" class="float-left js-no-auto-disable"
variant="success" variant="confirm"
category="primary" category="primary"
type="submit" type="submit"
> >

View file

@ -6,6 +6,7 @@ import boardsStore from '~/boards/stores/boards_store';
import { isScopedLabel } from '~/lib/utils/common_utils'; import { isScopedLabel } from '~/lib/utils/common_utils';
import { __ } from '~/locale'; import { __ } from '~/locale';
import eventHub from '~/sidebar/event_hub'; import eventHub from '~/sidebar/event_hub';
import Tracking from '~/tracking';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
// NOTE: need to revisit how we handle headerHeight, because we have so many different header and footer options. // NOTE: need to revisit how we handle headerHeight, because we have so many different header and footer options.
@ -21,7 +22,7 @@ export default {
BoardSettingsListTypes: () => BoardSettingsListTypes: () =>
import('ee_component/boards/components/board_settings_list_types.vue'), import('ee_component/boards/components/board_settings_list_types.vue'),
}, },
mixins: [glFeatureFlagMixin()], mixins: [glFeatureFlagMixin(), Tracking.mixin()],
inject: ['canAdminList'], inject: ['canAdminList'],
data() { data() {
return { return {
@ -72,6 +73,7 @@ export default {
// eslint-disable-next-line no-alert // eslint-disable-next-line no-alert
if (window.confirm(__('Are you sure you want to remove this list?'))) { if (window.confirm(__('Are you sure you want to remove this list?'))) {
if (this.shouldUseGraphQL || this.isEpicBoard) { if (this.shouldUseGraphQL || this.isEpicBoard) {
this.track('click_button', { label: 'remove_list' });
this.removeList(this.activeId); this.removeList(this.activeId);
} else { } else {
this.activeList.destroy(); this.activeList.destroy();

View file

@ -3,6 +3,7 @@ import { GlButton, GlModalDirective, GlTooltipDirective } from '@gitlab/ui';
import { formType } from '~/boards/constants'; import { formType } from '~/boards/constants';
import eventHub from '~/boards/eventhub'; import eventHub from '~/boards/eventhub';
import { s__, __ } from '~/locale'; import { s__, __ } from '~/locale';
import Tracking from '~/tracking';
export default { export default {
components: { components: {
@ -12,6 +13,7 @@ export default {
GlTooltip: GlTooltipDirective, GlTooltip: GlTooltipDirective,
GlModalDirective, GlModalDirective,
}, },
mixins: [Tracking.mixin()],
props: { props: {
boardsStore: { boardsStore: {
type: Object, type: Object,
@ -37,6 +39,7 @@ export default {
}, },
methods: { methods: {
showPage() { showPage() {
this.track('click_button', { label: 'edit_board' });
eventHub.$emit('showBoardModal', formType.edit); eventHub.$emit('showBoardModal', formType.edit);
if (this.boardsStore) { if (this.boardsStore) {
this.boardsStore.showPage(formType.edit); this.boardsStore.showPage(formType.edit);

View file

@ -95,6 +95,9 @@ export default {
} }
return __('Blocked issue'); return __('Blocked issue');
}, },
assignees() {
return this.issue.assignees.filter((_, index) => this.shouldRenderAssignee(index));
},
}, },
methods: { methods: {
isIndexLessThanlimit(index) { isIndexLessThanlimit(index) {
@ -215,8 +218,7 @@ export default {
</div> </div>
<div class="board-card-assignee gl-display-flex"> <div class="board-card-assignee gl-display-flex">
<user-avatar-link <user-avatar-link
v-for="(assignee, index) in issue.assignees" v-for="assignee in assignees"
v-if="shouldRenderAssignee(index)"
:key="assignee.id" :key="assignee.id"
:link-href="assigneeUrl(assignee)" :link-href="assigneeUrl(assignee)"
:img-alt="avatarUrlTitle(assignee)" :img-alt="avatarUrlTitle(assignee)"

View file

@ -10,7 +10,7 @@ export default {
}, },
props: { props: {
estimate: { estimate: {
type: Number, type: [Number, String],
required: true, required: true,
}, },
}, },

View file

@ -1,110 +0,0 @@
<script>
import { GlButton, GlDatepicker } from '@gitlab/ui';
import { mapGetters, mapActions } from 'vuex';
import BoardEditableItem from '~/boards/components/sidebar/board_editable_item.vue';
import createFlash from '~/flash';
import { dateInWords, formatDate, parsePikadayDate } from '~/lib/utils/datetime_utility';
import { __ } from '~/locale';
export default {
components: {
BoardEditableItem,
GlButton,
GlDatepicker,
},
data() {
return {
loading: false,
};
},
computed: {
...mapGetters(['activeBoardItem', 'projectPathForActiveIssue']),
hasDueDate() {
return this.activeBoardItem.dueDate != null;
},
parsedDueDate() {
if (!this.hasDueDate) {
return null;
}
return parsePikadayDate(this.activeBoardItem.dueDate);
},
formattedDueDate() {
if (!this.hasDueDate) {
return '';
}
return dateInWords(this.parsedDueDate, true);
},
},
methods: {
...mapActions(['setActiveIssueDueDate']),
async openDatePicker() {
await this.$nextTick();
this.$refs.datePicker.calendar.show();
},
async setDueDate(date) {
this.loading = true;
this.$refs.sidebarItem.collapse();
try {
const dueDate = date ? formatDate(date, 'yyyy-mm-dd') : null;
await this.setActiveIssueDueDate({ dueDate, projectPath: this.projectPathForActiveIssue });
} catch (e) {
createFlash({ message: this.$options.i18n.updateDueDateError });
} finally {
this.loading = false;
}
},
},
i18n: {
dueDate: __('Due date'),
removeDueDate: __('remove due date'),
updateDueDateError: __('An error occurred when updating the issue due date'),
},
};
</script>
<template>
<board-editable-item
ref="sidebarItem"
class="board-sidebar-due-date"
data-testid="sidebar-due-date"
:title="$options.i18n.dueDate"
:loading="loading"
@open="openDatePicker"
>
<template v-if="hasDueDate" #collapsed>
<div class="gl-display-flex gl-align-items-center">
<strong class="gl-text-gray-900">{{ formattedDueDate }}</strong>
<span class="gl-mx-2">-</span>
<gl-button
variant="link"
class="gl-text-gray-500!"
data-testid="reset-button"
:disabled="loading"
@click="setDueDate(null)"
>
{{ $options.i18n.removeDueDate }}
</gl-button>
</div>
</template>
<gl-datepicker
ref="datePicker"
:value="parsedDueDate"
show-clear-button
@input="setDueDate"
@clear="setDueDate(null)"
/>
</board-editable-item>
</template>
<style>
/*
* This can be removed after closing:
* https://gitlab.com/gitlab-org/gitlab-ui/-/issues/1048
*/
.board-sidebar-due-date .gl-datepicker,
.board-sidebar-due-date .gl-datepicker-input {
width: 100%;
}
</style>

View file

@ -3,7 +3,6 @@ import { GlLabel } from '@gitlab/ui';
import { mapGetters, mapActions } from 'vuex'; import { mapGetters, mapActions } from 'vuex';
import Api from '~/api'; import Api from '~/api';
import BoardEditableItem from '~/boards/components/sidebar/board_editable_item.vue'; import BoardEditableItem from '~/boards/components/sidebar/board_editable_item.vue';
import createFlash from '~/flash';
import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import { getIdFromGraphQLId } from '~/graphql_shared/utils';
import { isScopedLabel } from '~/lib/utils/common_utils'; import { isScopedLabel } from '~/lib/utils/common_utils';
import { mergeUrlParams } from '~/lib/utils/url_utility'; import { mergeUrlParams } from '~/lib/utils/url_utility';
@ -74,7 +73,7 @@ export default {
}, },
}, },
methods: { methods: {
...mapActions(['setActiveBoardItemLabels']), ...mapActions(['setActiveBoardItemLabels', 'setError']),
async setLabels(payload) { async setLabels(payload) {
this.loading = true; this.loading = true;
this.$refs.sidebarItem.collapse(); this.$refs.sidebarItem.collapse();
@ -88,7 +87,7 @@ export default {
const input = { addLabelIds, removeLabelIds, projectPath: this.projectPathForActiveIssue }; const input = { addLabelIds, removeLabelIds, projectPath: this.projectPathForActiveIssue };
await this.setActiveBoardItemLabels(input); await this.setActiveBoardItemLabels(input);
} catch (e) { } catch (e) {
createFlash({ message: __('An error occurred while updating labels.') }); this.setError({ error: e, message: __('An error occurred while updating labels.') });
} finally { } finally {
this.loading = false; this.loading = false;
} }
@ -101,7 +100,7 @@ export default {
const input = { removeLabelIds, projectPath: this.projectPathForActiveIssue }; const input = { removeLabelIds, projectPath: this.projectPathForActiveIssue };
await this.setActiveBoardItemLabels(input); await this.setActiveBoardItemLabels(input);
} catch (e) { } catch (e) {
createFlash({ message: __('An error occurred when removing the label.') }); this.setError({ error: e, message: __('An error occurred when removing the label.') });
} finally { } finally {
this.loading = false; this.loading = false;
} }

View file

@ -1,158 +0,0 @@
<script>
import {
GlDropdown,
GlDropdownItem,
GlDropdownText,
GlSearchBoxByType,
GlDropdownDivider,
GlLoadingIcon,
} from '@gitlab/ui';
import { mapGetters, mapActions } from 'vuex';
import BoardEditableItem from '~/boards/components/sidebar/board_editable_item.vue';
import createFlash from '~/flash';
import { __, s__ } from '~/locale';
import projectMilestones from '../../graphql/project_milestones.query.graphql';
export default {
components: {
BoardEditableItem,
GlDropdown,
GlLoadingIcon,
GlDropdownItem,
GlDropdownText,
GlSearchBoxByType,
GlDropdownDivider,
},
data() {
return {
milestones: [],
searchTitle: '',
loading: false,
edit: false,
};
},
apollo: {
milestones: {
query: projectMilestones,
debounce: 250,
skip() {
return !this.edit;
},
variables() {
return {
fullPath: this.projectPath,
searchTitle: this.searchTitle,
state: 'active',
includeAncestors: true,
};
},
update(data) {
const edges = data?.project?.milestones?.edges ?? [];
return edges.map((item) => item.node);
},
error() {
createFlash({ message: this.$options.i18n.fetchMilestonesError });
},
},
},
computed: {
...mapGetters(['activeBoardItem']),
hasMilestone() {
return this.activeBoardItem.milestone !== null;
},
groupFullPath() {
const { referencePath = '' } = this.activeBoardItem;
return referencePath.slice(0, referencePath.indexOf('/'));
},
projectPath() {
const { referencePath = '' } = this.activeBoardItem;
return referencePath.slice(0, referencePath.indexOf('#'));
},
dropdownText() {
return this.activeBoardItem.milestone?.title ?? this.$options.i18n.noMilestone;
},
},
methods: {
...mapActions(['setActiveIssueMilestone']),
handleOpen() {
this.edit = true;
this.$refs.dropdown.show();
},
handleClose() {
this.edit = false;
this.$refs.sidebarItem.collapse();
},
async setMilestone(milestoneId) {
this.loading = true;
this.searchTitle = '';
this.handleClose();
try {
const input = { milestoneId, projectPath: this.projectPath };
await this.setActiveIssueMilestone(input);
} catch (e) {
createFlash({ message: this.$options.i18n.updateMilestoneError });
} finally {
this.loading = false;
}
},
},
i18n: {
milestone: __('Milestone'),
noMilestone: __('No milestone'),
assignMilestone: __('Assign milestone'),
noMilestonesFound: s__('Milestones|No milestones found'),
fetchMilestonesError: __('There was a problem fetching milestones.'),
updateMilestoneError: __('An error occurred while updating the milestone.'),
},
};
</script>
<template>
<board-editable-item
ref="sidebarItem"
:title="$options.i18n.milestone"
:loading="loading"
data-testid="sidebar-milestones"
@open="handleOpen"
@close="handleClose"
>
<template v-if="hasMilestone" #collapsed>
<strong class="gl-text-gray-900">{{ activeBoardItem.milestone.title }}</strong>
</template>
<gl-dropdown
ref="dropdown"
:text="dropdownText"
:header-text="$options.i18n.assignMilestone"
block
@hide="handleClose"
>
<gl-search-box-by-type ref="search" v-model.trim="searchTitle" class="gl-m-3" />
<gl-dropdown-item
data-testid="no-milestone-item"
:is-check-item="true"
:is-checked="!activeBoardItem.milestone"
@click="setMilestone(null)"
>
{{ $options.i18n.noMilestone }}
</gl-dropdown-item>
<gl-dropdown-divider />
<gl-loading-icon v-if="$apollo.loading" class="gl-py-4" />
<template v-else-if="milestones.length > 0">
<gl-dropdown-item
v-for="milestone in milestones"
:key="milestone.id"
:is-check-item="true"
:is-checked="activeBoardItem.milestone && milestone.id === activeBoardItem.milestone.id"
data-testid="milestone-item"
@click="setMilestone(milestone.id)"
>
{{ milestone.title }}
</gl-dropdown-item>
</template>
<gl-dropdown-text v-else data-testid="no-milestones-found">
{{ $options.i18n.noMilestonesFound }}
</gl-dropdown-text>
</gl-dropdown>
</board-editable-item>
</template>

View file

@ -1,7 +1,6 @@
<script> <script>
import { GlToggle } from '@gitlab/ui'; import { GlToggle } from '@gitlab/ui';
import { mapGetters, mapActions } from 'vuex'; import { mapGetters, mapActions } from 'vuex';
import createFlash from '~/flash';
import { __, s__ } from '~/locale'; import { __, s__ } from '~/locale';
export default { export default {
@ -39,17 +38,16 @@ export default {
}, },
}, },
methods: { methods: {
...mapActions(['setActiveItemSubscribed']), ...mapActions(['setActiveItemSubscribed', 'setError']),
async handleToggleSubscription() { async handleToggleSubscription() {
this.loading = true; this.loading = true;
try { try {
await this.setActiveItemSubscribed({ await this.setActiveItemSubscribed({
subscribed: !this.activeBoardItem.subscribed, subscribed: !this.activeBoardItem.subscribed,
projectPath: this.projectPathForActiveIssue, projectPath: this.projectPathForActiveIssue,
}); });
} catch (error) { } catch (error) {
createFlash({ message: this.$options.i18n.updateSubscribedErrorMessage }); this.setError({ error, message: this.$options.i18n.updateSubscribedErrorMessage });
} finally { } finally {
this.loading = false; this.loading = false;
} }

View file

@ -9,17 +9,30 @@ export default {
inject: ['timeTrackingLimitToHours'], inject: ['timeTrackingLimitToHours'],
computed: { computed: {
...mapGetters(['activeBoardItem']), ...mapGetters(['activeBoardItem']),
initialTimeTracking() {
const {
timeEstimate,
totalTimeSpent,
humanTimeEstimate,
humanTotalTimeSpent,
} = this.activeBoardItem;
return {
timeEstimate,
totalTimeSpent,
humanTimeEstimate,
humanTotalTimeSpent,
};
},
}, },
}; };
</script> </script>
<template> <template>
<issuable-time-tracker <issuable-time-tracker
:time-estimate="activeBoardItem.timeEstimate" :issuable-id="activeBoardItem.id.toString()"
:time-spent="activeBoardItem.totalTimeSpent" :issuable-iid="activeBoardItem.iid.toString()"
:human-time-estimate="activeBoardItem.humanTimeEstimate"
:human-time-spent="activeBoardItem.humanTotalTimeSpent"
:limit-to-hours="timeTrackingLimitToHours" :limit-to-hours="timeTrackingLimitToHours"
:initial-time-tracking="initialTimeTracking"
:show-collapsed="false" :show-collapsed="false"
/> />
</template> </template>

View file

@ -2,7 +2,6 @@
import { GlAlert, GlButton, GlForm, GlFormGroup, GlFormInput } from '@gitlab/ui'; import { GlAlert, GlButton, GlForm, GlFormGroup, GlFormInput } from '@gitlab/ui';
import { mapGetters, mapActions } from 'vuex'; import { mapGetters, mapActions } from 'vuex';
import BoardEditableItem from '~/boards/components/sidebar/board_editable_item.vue'; import BoardEditableItem from '~/boards/components/sidebar/board_editable_item.vue';
import createFlash from '~/flash';
import { joinPaths } from '~/lib/utils/url_utility'; import { joinPaths } from '~/lib/utils/url_utility';
import { __ } from '~/locale'; import { __ } from '~/locale';
import autofocusonshow from '~/vue_shared/directives/autofocusonshow'; import autofocusonshow from '~/vue_shared/directives/autofocusonshow';
@ -53,7 +52,7 @@ export default {
}, },
}, },
methods: { methods: {
...mapActions(['setActiveItemTitle']), ...mapActions(['setActiveItemTitle', 'setError']),
getPendingChangesKey(item) { getPendingChangesKey(item) {
if (!item) { if (!item) {
return ''; return '';
@ -97,7 +96,7 @@ export default {
this.showChangesAlert = false; this.showChangesAlert = false;
} catch (e) { } catch (e) {
this.title = this.item.title; this.title = this.item.title;
createFlash({ message: this.$options.i18n.updateTitleError }); this.setError({ error: e, message: this.$options.i18n.updateTitleError });
} finally { } finally {
this.loading = false; this.loading = false;
} }

View file

@ -9,17 +9,6 @@ import updateBoardListMutation from './graphql/board_list_update.mutation.graphq
import issueSetSubscriptionMutation from './graphql/issue_set_subscription.mutation.graphql'; import issueSetSubscriptionMutation from './graphql/issue_set_subscription.mutation.graphql';
import issueSetTitleMutation from './graphql/issue_set_title.mutation.graphql'; import issueSetTitleMutation from './graphql/issue_set_title.mutation.graphql';
export const SupportedFilters = [
'assigneeUsername',
'authorUsername',
'labelName',
'milestoneTitle',
'releaseTag',
'search',
'myReactionEmoji',
'assigneeId',
];
/* eslint-disable-next-line @gitlab/require-i18n-strings */ /* eslint-disable-next-line @gitlab/require-i18n-strings */
export const AssigneeIdParamValues = ['Any', 'None']; export const AssigneeIdParamValues = ['Any', 'None'];
@ -47,6 +36,7 @@ export const ListTypeTitles = {
milestone: __('Milestone'), milestone: __('Milestone'),
iteration: __('Iteration'), iteration: __('Iteration'),
label: __('Label'), label: __('Label'),
backlog: __('Open'),
}; };
export const formType = { export const formType = {
@ -60,8 +50,6 @@ export const inactiveId = 0;
export const ISSUABLE = 'issuable'; export const ISSUABLE = 'issuable';
export const LIST = 'list'; export const LIST = 'list';
export const NOT_FILTER = 'not[';
export const flashAnimationDuration = 2000; export const flashAnimationDuration = 2000;
export const listsQuery = { export const listsQuery = {
@ -106,6 +94,19 @@ export const subscriptionQueries = {
}, },
}; };
export const FilterFields = {
[issuableTypes.issue]: [
'assigneeUsername',
'assigneeWildcardId',
'authorUsername',
'labelName',
'milestoneTitle',
'myReactionEmoji',
'releaseTag',
'search',
],
};
export default { export default {
BoardType, BoardType,
ListType, ListType,

View file

@ -0,0 +1,16 @@
#import "~/graphql_shared/fragments/user.fragment.graphql"
query GroupBoardMembers($fullPath: ID!, $search: String) {
workspace: group(fullPath: $fullPath) {
__typename
assignees: groupMembers(search: $search) {
__typename
nodes {
id
user {
...User
}
}
}
}
}

View file

@ -14,10 +14,6 @@ fragment IssueNode on Issue {
confidential confidential
webUrl webUrl
relativePosition relativePosition
milestone {
id
title
}
assignees { assignees {
nodes { nodes {
...User ...User

View file

@ -1,8 +0,0 @@
mutation issueSetDueDate($input: UpdateIssueInput!) {
updateIssue(input: $input) {
issue {
dueDate
}
errors
}
}

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