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,46 +351,51 @@ export default {
</script> </script>
<template> <template>
<div> <gl-tabs data-testid="alert-integration-settings">
<gl-alert <gl-tab :title="$options.i18n.settingsTabs.currentIntegrations">
v-if="showSuccessfulCreateAlert" <gl-alert
class="gl-mt-n2" v-if="showSuccessfulCreateAlert"
:primary-button-text="$options.i18n.integrationCreated.btnCaption" class="gl-mt-n2"
:title="$options.i18n.integrationCreated.title" :primary-button-text="$options.i18n.integrationCreated.btnCaption"
@primaryAction="viewCreatedIntegration" :title="$options.i18n.integrationCreated.title"
@dismiss="showSuccessfulCreateAlert = false" @primaryAction="viewCreatedIntegration"
> @dismiss="showSuccessfulCreateAlert = false"
{{ $options.i18n.integrationCreated.successMsg }} >
</gl-alert> {{ $options.i18n.integrationCreated.successMsg }}
</gl-alert>
<integrations-list <integrations-list
:integrations="integrations" :integrations="integrations"
:loading="loading" :loading="loading"
@edit-integration="editIntegration" @edit-integration="editIntegration"
@delete-integration="deleteIntegration" @delete-integration="deleteIntegration"
/> />
<gl-button <gl-button
v-if="canAddIntegration && !formVisible" v-if="canAddIntegration && !formVisible"
category="secondary" category="secondary"
variant="confirm" variant="confirm"
data-testid="add-integration-btn" data-testid="add-integration-btn"
class="gl-mt-3" class="gl-mt-3"
@click="setFormVisibility(true)" @click="setFormVisibility(true)"
> >
{{ $options.i18n.addNewIntegration }} {{ $options.i18n.addNewIntegration }}
</gl-button> </gl-button>
<alert-settings-form <alert-settings-form
v-if="formVisible" v-if="formVisible"
:loading="isUpdating" :loading="isUpdating"
:can-add-integration="canAddIntegration" :can-add-integration="canAddIntegration"
:alert-fields="alertFields" :alert-fields="alertFields"
:tab-index="tabIndex" :tab-index="tabIndex"
@create-new-integration="createNewIntegration" @create-new-integration="createNewIntegration"
@update-integration="updateIntegration" @update-integration="updateIntegration"
@reset-token="resetToken" @reset-token="resetToken"
@clear-current-integration="clearCurrentIntegration" @clear-current-integration="clearCurrentIntegration"
@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: this.discussion.notes.find((note) => !note.system).author.name, __("%{authorsName}'s thread"),
}); {
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) &&
renderedChars > MAX_CHAR_LIMIT || ((source && source.length > MAX_CHAR_LIMIT) ||
renderedMermaidBlocks >= MAX_MERMAID_BLOCK_LIMIT || renderedChars > MAX_CHAR_LIMIT ||
shouldLazyLoadMermaidBlock(source) renderedMermaidBlocks >= MAX_MERMAID_BLOCK_LIMIT ||
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 - const parseFilters = (filters) => {
* while the GraphQL query accepts the value in 'assigneWildcardId' field. /* eslint-disable-next-line @gitlab/require-i18n-strings */
* Once we deprecate the classics boards, const isNegated = (x) => x.startsWith('not[') && x.endsWith(']');
* we should change the filtered search bar to use 'asssigneeWildcardId' as a token name.
*/
if (f === 'assigneeId' && filters[f]) {
return AssigneeIdParamValues.includes(filters[f])
? {
...acc,
assigneeWildcardId: filters[f].toUpperCase(),
}
: acc;
}
if (filters[f]) { return Object.entries(filters).map(([k, v]) => {
return { const isNot = isNegated(k);
...acc, const filterKey = isNot ? k.slice(4, -1) : k;
[f]: filters[f],
};
}
return acc; 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,
not: {
...acc.not,
[k]: v,
},
}
: {
...acc,
[k]: v,
};
},
{ not: {} },
);
// 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
v-if="iterationFeatureAvailable"
:iid="activeBoardItem.iid" :iid="activeBoardItem.iid"
issuable-attribute="milestone"
:workspace-path="projectPathForActiveIssue" :workspace-path="projectPathForActiveIssue"
:iterations-workspace-path="groupPathForActiveIssue" :attr-workspace-path="projectPathForActiveIssue"
:issuable-type="issuableType" :issuable-type="issuableType"
class="gl-mt-5" 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"
:iid="activeBoardItem.iid"
:workspace-path="projectPathForActiveIssue"
:attr-workspace-path="groupPathForActiveIssue"
:issuable-type="issuableType"
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) {
eventHub.$on(`toggle-issue-form-${this.list.id}`, this.toggleForm); if (id) {
eventHub.$on(`scroll-board-list-${this.list.id}`, this.scrollToTop); eventHub.$on(`toggle-issue-form-${this.list.id}`, this.toggleForm);
}, eventHub.$on(`scroll-board-list-${this.list.id}`, this.scrollToTop);
mounted() { eventHub.$off(`toggle-issue-form-${oldVal}`, this.toggleForm);
// Scroll event on list to load more eventHub.$off(`scroll-board-list-${oldVal}`, this.scrollToTop);
this.listRef.addEventListener('scroll', this.onScroll); }
},
immediate: true,
},
}, },
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.loadNextPage();
this.scrollTop() > this.scrollHeight() - this.scrollOffset && }
this.hasNextPage
) {
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,15 +251,17 @@ export default {
:item="item" :item="item"
:disabled="disabled" :disabled="disabled"
/> />
<li v-if="showCount" class="board-list-count gl-text-center" data-issue-id="-1"> <gl-intersection-observer @appear="onReachingListBottom">
<gl-loading-icon <li v-if="showCount" class="board-list-count gl-text-center" data-issue-id="-1">
v-if="loadingMore" <gl-loading-icon
:label="$options.i18n.loadingMoreboardItems" v-if="loadingMore"
data-testid="count-loading-icon" :label="$options.i18n.loadingMoreboardItems"
/> data-testid="count-loading-icon"
<span v-if="showingAllItems">{{ showingAllItemsText }}</span> />
<span v-else>{{ paginatedIssueText }}</span> <span v-if="showingAllItems">{{ showingAllItemsText }}</span>
</li> <span v-else>{{ paginatedIssueText }}</span>
</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';
@ -50,10 +49,10 @@ export default {
/* /*
Labels fetched in epic boards are always group-level labels Labels fetched in epic boards are always group-level labels
and the correct path are passed from the backend (injected through labelsFetchPath) and the correct path are passed from the backend (injected through labelsFetchPath)
For issue boards, we should always include project-level labels and use a different endpoint. For issue boards, we should always include project-level labels and use a different endpoint.
(it requires knowing the project path of a selected issue.) (it requires knowing the project path of a selected issue.)
Note 1. that we will be using GraphQL to fetch labels when we create a labels select widget. Note 1. that we will be using GraphQL to fetch labels when we create a labels select widget.
And this component will be removed _wholesale_ https://gitlab.com/gitlab-org/gitlab/-/issues/300653. And this component will be removed _wholesale_ https://gitlab.com/gitlab-org/gitlab/-/issues/300653.
@ -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