diff --git a/.eslintrc.yml b/.eslintrc.yml index 95cbc602d5b257e24c6683fb4a689450bf4a4f54..e131d4c07d14cd9eeabc2fb86e6b0d3c7562e413 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -1,5 +1,6 @@ extends: - '@gitlab' + - plugin:promise/recommended globals: __webpack_public_path__: true gl: false @@ -8,9 +9,9 @@ globals: IS_EE: false plugins: - import - - html - "@gitlab/i18n" - "@gitlab/vue-i18n" + - no-jquery settings: import/resolver: webpack: @@ -37,6 +38,13 @@ rules: vue/no-use-v-if-with-v-for: off vue/no-v-html: off vue/use-v-on-exact: off + no-jquery/no-ajax: error + no-jquery/no-ajax-events: error + no-jquery/no-load: error + no-jquery/no-load-shorthand: error + no-jquery/no-serialize: error + promise/always-return: off + promise/no-callback-in-promise: off overrides: files: - '**/spec/**/*' diff --git a/.gitattributes b/.gitattributes index 7282c9e61b12f48c6d119b839a936cbce6476723..0b87a97df9c80f92bf3f332bbb302a404ae1534a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ +VERSION merge=ours Dangerfile gitlab-language=ruby db/schema.rb merge=merge_db_schema diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 2e88b7aa0a96fc6fbc17ccfc6b282363de5a7596..793a52e359d51cfd0d8bb0fddab8d32e39dacf38 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,3 +1,3 @@ We’re closing our issue tracker on GitHub so we can focus on the GitLab.com project and respond to issues more quickly. -We encourage you to open an issue on the [GitLab.com issue tracker](https://gitlab.com/gitlab-org/gitlab-ce/issues). You can log into GitLab.com using your GitHub account. +We encourage you to open an issue on the [GitLab.com issue tracker](https://gitlab.com/gitlab-org/gitlab/issues). You can log into GitLab.com using your GitHub account. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c3b0402644040b93bd08dba93972a0f00d7891b6..40984c451c45519013bd24303f97651506bc4971 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,3 +1,3 @@ Thank you for taking the time to contribute back to GitLab! -Please open a merge request [on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests), we look forward to reviewing your contribution! You can log into GitLab.com using your GitHub account. +Please open a merge request [on GitLab.com](https://gitlab.com/gitlab-org/gitlab/merge_requests), we look forward to reviewing your contribution! You can log into GitLab.com using your GitHub account. diff --git a/.gitignore b/.gitignore index 7310c04d117600f12b80c31b7e333595eeb84b1e..65befc209636df2085ea351d9c2d94b7d0073257 100644 --- a/.gitignore +++ b/.gitignore @@ -81,3 +81,4 @@ package-lock.json jsdoc/ **/tmp/rubocop_cache/** .overcommit.yml +.projections.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b3b6beb10680c5af2e5ca7143ea599f68d4b06a1..ff1f79a3fa49927fd8fd42c878222496cfae11df 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,6 @@ image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.33" stages: - - build - prepare - quick-test - test @@ -18,8 +17,7 @@ variables: GIT_DEPTH: "20" GIT_SUBMODULE_STRATEGY: "none" GET_SOURCES_ATTEMPTS: "3" - KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master.json - EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master-ee.json + KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/report-master.json FLAKY_RSPEC_SUITE_REPORT_PATH: rspec_flaky/report-suite.json BUILD_ASSETS_IMAGE: "false" ES_JAVA_OPTS: "-Xms256m -Xmx256m" @@ -42,4 +40,3 @@ include: - local: .gitlab/ci/setup.gitlab-ci.yml - local: .gitlab/ci/test-metadata.gitlab-ci.yml - local: .gitlab/ci/yaml.gitlab-ci.yml - - local: .gitlab/ci/ee-specific-checks.gitlab-ci.yml diff --git a/.gitlab/ci/cng.gitlab-ci.yml b/.gitlab/ci/cng.gitlab-ci.yml index a43d36941035eff49fbdafe9a3b08c3e45126ee0..35859a1ab335c8375ffce952be06d997e1b70589 100644 --- a/.gitlab/ci/cng.gitlab-ci.yml +++ b/.gitlab/ci/cng.gitlab-ci.yml @@ -11,5 +11,6 @@ cloud-native-image: - CNG_PROJECT_PATH="gitlab-org/build/CNG" BUILD_TRIGGER_TOKEN=$CI_JOB_TOKEN ./scripts/trigger-build cng only: refs: - - tags@gitlab-org/gitlab-ce - - tags@gitlab-org/gitlab-ee + - tags + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index 3f29adddf731da039a618aea4bcaee09d460149d..87023da3c24fb011b13a29481e59ab4ea1dbe561 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -2,6 +2,12 @@ extends: - .default-tags - .default-retry + - .only-docs-changes + only: + refs: + - merge_requests + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" image: ruby:2.6-alpine stage: review dependencies: [] @@ -10,7 +16,7 @@ environment: name: review-docs/$CI_COMMIT_REF_SLUG # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables - # Discussion: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14236/diffs#note_40140693 + # Discussion: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14236/diffs#note_40140693 url: http://$CI_ENVIRONMENT_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX on_stop: review-docs-cleanup before_script: @@ -19,55 +25,32 @@ - apk add --update openssl - wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/trigger-build-docs - chmod 755 trigger-build-docs - -# Trigger a manual docs build in gitlab-docs only on non docs-only branches. -# Useful to preview the docs changes live. -review-docs-deploy-manual: - extends: - - .review-docs - - .except-docs-qa - script: - gem install gitlab --no-document - - ./trigger-build-docs deploy - when: manual - only: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee # Always trigger a docs build in gitlab-docs only on docs-only branches. # Useful to preview the docs changes live. review-docs-deploy: - extends: - - .review-docs - - .except-qa + extends: .review-docs script: - - gem install gitlab --no-document - ./trigger-build-docs deploy - only: - - /(^docs[\/-].+|.+-docs$)/@gitlab-org/gitlab-ce - - /(^docs[\/-].+|.+-docs$)/@gitlab-org/gitlab-ee + when: manual # Cleanup remote environment of gitlab-docs review-docs-cleanup: - extends: - - .review-docs - - .except-qa + extends: .review-docs environment: name: review-docs/$CI_COMMIT_REF_SLUG action: stop script: - - gem install gitlab --no-document - ./trigger-build-docs cleanup when: manual - only: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee docs lint: extends: - .default-tags - .default-retry - - .except-qa + - .default-only + - .only-docs-changes image: "registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-docs-lint" stage: test dependencies: [] diff --git a/.gitlab/ci/ee-specific-checks.gitlab-ci.yml b/.gitlab/ci/ee-specific-checks.gitlab-ci.yml deleted file mode 100644 index babb89b4606ca673b8d995ecef0ad8639ed7eb7b..0000000000000000000000000000000000000000 --- a/.gitlab/ci/ee-specific-checks.gitlab-ci.yml +++ /dev/null @@ -1,22 +0,0 @@ -.ee-specific-check: - extends: .default-tags - dependencies: [] - only: - - branches@gitlab-org/gitlab-ee - except: - - master - - tags - - /[\d-]+-stable(-ee)?/ - - /[\d-]+-auto-deploy-\d{7}/ - - /^security-/ - - /\bce\-to\-ee\b/ - -ee-files-location-check: - extends: .ee-specific-check - script: - - scripts/ee-files-location-check - -ee-specific-lines-check: - extends: .ee-specific-check - script: - - scripts/ee-specific-lines-check diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index b2058506ea1af9ca6aa8ab6d6519703cd8d81fd8..1feda7ed4d458f5d94deb71e175a10946bb35746 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -9,9 +9,10 @@ extends: - .default-tags - .default-retry - - .assets-compile-cache + - .default-only - .default-before_script - - .except-docs + - .assets-compile-cache + - .only-code-qa-changes image: dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-git-2.22-chrome-73.0-node-12.x-yarn-1.16-graphicsmagick-1.3.33-docker-18.06.1 stage: test dependencies: ["setup-test-env"] @@ -45,10 +46,9 @@ - scripts/clean-old-cached-assets - rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here only: - - /.+/@gitlab-org/gitlab-ce - - /.+/@gitlab-org/gitlab-ee - - /.+/@gitlab/gitlabhq - - /.+/@gitlab/gitlab-ee + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ # Matches the gitlab-org group and its subgroups + - $CI_SERVER_HOST == "dev.gitlab.org" tags: - gitlab-org - docker @@ -57,8 +57,7 @@ gitlab:assets:compile: extends: .gitlab:assets:compile-metadata only: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee + - master cache: policy: pull-push @@ -66,9 +65,7 @@ gitlab:assets:compile pull-cache: extends: .gitlab:assets:compile-metadata except: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - /(^docs[\/-].+|.+-docs$)/ + - master cache: policy: pull @@ -76,9 +73,11 @@ gitlab:assets:compile pull-cache: extends: - .default-tags - .default-retry - - .assets-compile-cache + - .default-only - .default-before_script - - .use-pg + - .assets-compile-cache + - .only-code-qa-changes + - .use-pg9 stage: prepare script: - node --version @@ -98,12 +97,10 @@ gitlab:assets:compile pull-cache: - public/assets compile-assets: - extends: - - .compile-assets-metadata + extends: .compile-assets-metadata only: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee + - master cache: policy: pull-push @@ -111,21 +108,23 @@ compile-assets pull-cache: extends: .compile-assets-metadata except: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - /(^docs[\/-].+|.+-docs$)/ + - master cache: policy: pull -karma: +.only-code-frontend-job-base: extends: - .default-tags - .default-retry - .default-cache + - .default-only - .default-before_script - - .use-pg - - .except-docs + - .only-code-changes + - .use-pg9 dependencies: ["compile-assets", "compile-assets pull-cache", "setup-test-env"] + +karma: + extends: .only-code-frontend-job-base variables: # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 @@ -148,14 +147,7 @@ karma: junit: junit_karma.xml jest: - extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .use-pg - - .except-docs-qa - dependencies: ["compile-assets", "compile-assets pull-cache", "setup-test-env"] + extends: .only-code-frontend-job-base script: - scripts/gitaly-test-spawn - date @@ -178,27 +170,26 @@ jest: - tmp/jest/jest/ policy: pull-push -.qa: +.qa-job-base: extends: - .default-tags - .default-retry - .default-cache - - .except-docs + - .default-only + - .only-code-qa-changes dependencies: [] stage: test - variables: - SETUP_DB: "false" before_script: - cd qa/ - bundle install qa:internal: - extends: .qa + extends: .qa-job-base script: - bundle exec rspec qa:selectors: - extends: .qa + extends: .qa-job-base script: - bundle exec bin/qa Test::Sanity::Selectors @@ -207,7 +198,8 @@ qa:selectors: - .default-tags - .default-retry - .default-cache - - .except-docs + - .default-only + - .only-code-changes dependencies: [] cache: key: "$CI_JOB_NAME" @@ -238,10 +230,10 @@ webpack-dev-server: - .default-tags - .default-retry - .default-cache - - .except-docs-qa - dependencies: ["compile-assets", "compile-assets pull-cache", "setup-test-env"] + - .default-only + - .only-code-changes + dependencies: ["setup-test-env", "compile-assets", "compile-assets pull-cache"] variables: - SETUP_DB: "false" WEBPACK_MEMORY_TEST: "true" script: - node --version diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index 04135447ca4b86160162b0157c42d46830ec8d0d..e0ce6e2fde2bf964938049d5d844e5c0bbb1b33d 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -13,6 +13,8 @@ .default-before_script: before_script: - date + - export GOPATH=$CI_PROJECT_DIR/.go + - mkdir -p $GOPATH - source scripts/utils.sh - source scripts/prepare_build.sh - date @@ -22,55 +24,122 @@ cache: key: "debian-stretch-ruby-2.6.3-node-12.x" paths: + - .go/pkg/mod - vendor/ruby - .yarn-cache/ - vendor/gitaly-ruby policy: pull -.except-docs: - except: +.default-only: + only: refs: - - /(^docs[\/-].+|.+-docs$)/ + - master + - /^[\d-]+-stable(-ee)?$/ + - /^\d+-\d+-auto-deploy-\d+$/ + - /^security\// + - merge_requests + - tags -.except-qa: - except: - refs: - - /(^qa[\/-].*|.*-qa$)/ +.only-code-changes: + only: + changes: + - ".gitlab/ci/**/*" + - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" + - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" + - ".csscomb.json" + - "Dangerfile" + - "Dockerfile.assets" + - "*_VERSION" + - "Gemfile{,.lock}" + - "Rakefile" + - "{babel.config,jest.config}.js" + - "config.ru" + - "{package.json,yarn.lock}" + - "{app,bin,config,danger,db,ee,fixtures,haml_lint,lib,locale,public,rubocop,scripts,spec,symbol,vendor}/**/*" + - "doc/README.md" # Some RSpec test rely on this file -.except-docs-qa: - except: - refs: - - /(^docs[\/-].+|.+-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ +.only-qa-changes: + only: + changes: + - ".dockerignore" + - "qa/**/*" -.except-docs-qa-geo: - except: - refs: - - /(^docs[\/-].+|.+-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ - - /(^geo[\/-].*|.*-geo$)/ +.only-docs-changes: + only: + changes: + - ".gitlab/route-map.yml" + - "doc/**/*" + - ".markdownlint.json" -.review-only: +.only-code-qa-changes: only: - refs: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee + changes: + - ".gitlab/ci/**/*" + - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" + - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" + - ".csscomb.json" + - "Dangerfile" + - "Dockerfile.assets" + - "*_VERSION" + - "Gemfile{,.lock}" + - "Rakefile" + - "{babel.config,jest.config}.js" + - "config.ru" + - "{package.json,yarn.lock}" + - "{app,bin,config,danger,db,ee,fixtures,haml_lint,lib,locale,public,rubocop,scripts,spec,symbol,vendor}/**/*" + - "doc/README.md" # Some RSpec test rely on this file + - ".dockerignore" + - "qa/**/*" + +.only-review: + only: + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" kubernetes: active except: refs: - master - /^\d+-\d+-auto-deploy-\d+$/ - - /(^docs[\/-].+|.+-docs$)/ + - /^[\d-]+-stable(-ee)?$/ -.use-pg: +.only-review-schedules: + only: + refs: + - schedules + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + kubernetes: active + +.use-pg9: + services: + - name: postgres:9.6 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine + +.use-pg10: + image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33" + services: + - name: postgres:10.9 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine + +.use-pg9-ee: services: - - name: postgres:9.6.14 + - name: postgres:9.6 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - name: redis:alpine + - name: docker.elastic.co/elasticsearch/elasticsearch:5.6.12 -.use-pg-10: +.use-pg10-ee: image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33" services: - name: postgres:10.9 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - name: redis:alpine + - name: docker.elastic.co/elasticsearch/elasticsearch:5.6.12 + +.only-ee: + only: + variables: + - $CI_PROJECT_NAME == "gitlab" + - $CI_PROJECT_NAME == "gitlab-ee" # Support former project name for forks/mirrors diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index 1936933cca49ee5dfac44ae4517a5c640dff5602..93bf87b24b2e3ad5c5c0cf9929ee5b1ca2140b24 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -1,10 +1,14 @@ -memory-static: +.only-code-memory-job-base: extends: - .default-tags - .default-retry - .default-cache + - .default-only - .default-before_script - - .except-docs + - .only-code-changes + +memory-static: + extends: .only-code-memory-job-base variables: SETUP_DB: "false" script: @@ -31,12 +35,8 @@ memory-static: # All tests are run without a webserver (directly using Rack::Mock by default). memory-on-boot: extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .use-pg-10 - - .except-docs-qa + - .only-code-memory-job-base + - .use-pg10 variables: NODE_ENV: "production" RAILS_ENV: "production" diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index 2de09753cca80a6e231a5122fc377acf8c746d2a..a59b84fe1cff81e7f79b355d610adfa0b08538bf 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -3,11 +3,13 @@ pages: - .default-tags - .default-retry - .default-cache - - .except-docs + - .default-only + - .only-code-qa-changes only: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee + - master + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" stage: pages dependencies: ["coverage", "karma", "gitlab:assets:compile"] script: diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index ca89c4e2c895b60afa96d4af609f1b1b91451a6e..ce34cfb39a8f26cc40c6bbb882cd503e2ff0c8f7 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -1,43 +1,46 @@ .package-and-qa-base: + extends: .default-only image: ruby:2.6-alpine stage: qa dependencies: [] - variables: - GIT_DEPTH: "1" retry: 0 script: - source scripts/utils.sh - install_gitlab_gem - ./scripts/trigger-build omnibus only: - refs: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ # Matches the gitlab-org group or its subgroups package-and-qa-manual: - extends: .package-and-qa-base + extends: + - .package-and-qa-base + - .only-code-changes except: refs: - master - - /(^docs[\/-].+|.+-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ + - /^\d+-\d+-auto-deploy-\d+$/ when: manual needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] -package-and-qa-manual:master: - extends: .package-and-qa-base - only: +package-and-qa: + extends: + - .package-and-qa-base + - .only-qa-changes + except: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - when: manual - needs: ["build-qa-image", "gitlab:assets:compile"] + - master + - /^\d+-\d+-auto-deploy-\d+$/ + needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] + allow_failure: true -package-and-qa: - extends: .package-and-qa-base +schedule:package-and-qa: + extends: + - .package-and-qa-base + - .only-code-qa-changes only: refs: - - /(^qa[\/-].*|.*-qa$)/@gitlab-org/gitlab-ce - - /(^qa[\/-].*|.*-qa$)/@gitlab-org/gitlab-ee - needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] + - schedules@gitlab-org/gitlab + - schedules@gitlab-org/gitlab-foss + needs: ["build-qa-image", "gitlab:assets:compile"] allow_failure: true diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 878be25c39b85e58a8489f3ab7c40361ec41a729..c315501b0bae4f35157e51ded8aa1a835ce83ee6 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -1,54 +1,61 @@ -.only-schedules-master: +.only-master: only: refs: - - schedules@gitlab-org/gitlab-ce - - schedules@gitlab-org/gitlab-ee - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - master@gitlab/gitlabhq - - master@gitlab/gitlab-ee + - master .rake-exec: extends: - .default-tags - .default-retry - .default-cache + - .default-only - .default-before_script variables: SETUP_DB: "false" script: - bundle exec rake $CI_JOB_NAME -.rspec-base: +.only-code-rails-job-base: extends: - .default-tags - .default-retry - .default-cache + - .default-only - .default-before_script - - .except-docs-qa + - .only-code-changes + +.only-code-qa-rails-job-base: + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .default-before_script + - .only-code-qa-changes + +setup-test-env: + extends: + - .only-code-qa-rails-job-base + - .use-pg9 + stage: prepare + script: + - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' + - scripts/gitaly-test-build # Do not use 'bundle exec' here + artifacts: + expire_in: 7d + paths: + - tmp/tests + - config/secrets.yml + - vendor/gitaly-ruby + cache: + policy: pull-push + +.rspec-base: + extends: .only-code-rails-job-base stage: test script: - - JOB_NAME=( $CI_JOB_NAME ) - - TEST_TOOL=${JOB_NAME[0]} - - TEST_LEVEL=${JOB_NAME[1]} - - DATABASE=${JOB_NAME[2]} - - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - export KNAPSACK_GENERATE_REPORT=true KNAPSACK_LOG_LEVEL=debug KNAPSACK_TEST_DIR=spec - - export SUITE_FLAKY_RSPEC_REPORT_PATH=${FLAKY_RSPEC_SUITE_REPORT_PATH} - - export FLAKY_RSPEC_REPORT_PATH=rspec_flaky/all_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - export NEW_FLAKY_RSPEC_REPORT_PATH=rspec_flaky/new_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - export FLAKY_RSPEC_GENERATE_REPORT=true - - export CACHE_CLASSES=true - - cp ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH} - - '[[ -f $FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_REPORT_PATH}' - - '[[ -f $NEW_FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${NEW_FLAKY_RSPEC_REPORT_PATH}' - - scripts/gitaly-test-spawn - - date - - 'export KNAPSACK_TEST_FILE_PATTERN=$(ruby -r./lib/quality/test_level.rb -e "puts Quality::TestLevel.new.pattern(:${TEST_LEVEL})")' - - mkdir -p tmp/memory_test - - export MEMORY_TEST_PATH="tmp/memory_test/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_memory.csv" - - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag level:${TEST_LEVEL} --tag ~geo" - - date + - source scripts/rspec_helpers.sh + - rspec_paralellized_job "--tag ~quarantine --tag ~geo" artifacts: expire_in: 31d when: always @@ -62,88 +69,147 @@ reports: junit: junit_rspec.xml -.rspec-base-pg: +.rspec-base-pg9: extends: - .rspec-base - - .use-pg + - .use-pg9 -.rspec-base-pg-10: +.rspec-base-pg10: extends: - .rspec-base - - .use-pg-10 + - .use-pg10 + - .only-master -setup-test-env: - extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .use-pg - - .except-docs - stage: prepare - script: - - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' - - scripts/gitaly-test-build # Do not use 'bundle exec' here - artifacts: - expire_in: 7d - paths: - - tmp/tests - - config/secrets.yml - - vendor/gitaly-ruby +rspec unit pg9: + extends: .rspec-base-pg9 + parallel: 20 -rspec unit pg: - extends: .rspec-base-pg +rspec integration pg9: + extends: .rspec-base-pg9 + parallel: 6 + +rspec system pg9: + extends: .rspec-base-pg9 + parallel: 24 + +rspec unit pg10: + extends: .rspec-base-pg10 parallel: 20 -rspec integration pg: - extends: .rspec-base-pg +rspec integration pg10: + extends: .rspec-base-pg10 parallel: 6 -rspec system pg: - extends: .rspec-base-pg +rspec system pg10: + extends: .rspec-base-pg10 parallel: 24 -rspec unit pg-10: +.rspec-ee-base-pg9: extends: - - .rspec-base-pg-10 - - .only-schedules-master - parallel: 20 + - .rspec-base + - .only-ee + - .use-pg9-ee -rspec integration pg-10: +.rspec-ee-base-pg10: extends: - - .rspec-base-pg-10 - - .only-schedules-master - parallel: 6 + - .rspec-base + - .only-ee + - .use-pg10-ee + +rspec-ee unit pg9: + extends: .rspec-ee-base-pg9 + parallel: 7 -rspec system pg-10: +rspec-ee integration pg9: + extends: .rspec-ee-base-pg9 + parallel: 3 + +rspec-ee system pg9: + extends: .rspec-ee-base-pg9 + parallel: 5 + +rspec-ee unit pg10: extends: - - .rspec-base-pg-10 - - .only-schedules-master - parallel: 24 + - .rspec-ee-base-pg10 + - .only-master + parallel: 7 + +rspec-ee integration pg10: + extends: + - .rspec-ee-base-pg10 + - .only-master + parallel: 3 -rspec-fast-spec-helper: - extends: .rspec-base-pg +rspec-ee system pg10: + extends: + - .rspec-ee-base-pg10 + - .only-master + parallel: 5 + +.rspec-ee-base-geo: + extends: + - .rspec-base + - .only-ee script: - - bundle exec rspec spec/fast_spec_helper.rb + - source scripts/rspec_helpers.sh + - scripts/prepare_postgres_fdw.sh + - rspec_paralellized_job "--tag ~quarantine --tag geo" -rspec quarantine pg: +.rspec-ee-base-geo-pg9: extends: - - .default-before_script - - .rspec-base-pg - - .only-schedules-master + - .rspec-ee-base-geo + - .use-pg9-ee + +.rspec-ee-base-geo-pg10: + extends: + - .rspec-ee-base-geo + - .use-pg10-ee + +rspec-ee unit pg9 geo: + extends: .rspec-ee-base-geo-pg9 + parallel: 2 + +rspec-ee integration pg9 geo: + extends: .rspec-ee-base-geo-pg9 + +rspec-ee system pg9 geo: + extends: .rspec-ee-base-geo-pg9 + +rspec-ee unit pg10 geo: + extends: .rspec-ee-base-geo-pg10 + parallel: 2 + +rspec-ee integration pg10 geo: + extends: .rspec-ee-base-geo-pg10 + +rspec-ee system pg10 geo: + extends: .rspec-ee-base-geo-pg10 + +rspec quarantine pg9: + extends: + - .rspec-base-pg9 + - .only-master + variables: + RSPEC_OPTS: "--tag quarantine -- spec/" script: - - export NO_KNAPSACK=1 CACHE_CLASSES=true - - scripts/gitaly-test-spawn - - bin/rspec --color --format documentation --tag quarantine -- spec/ + - source scripts/rspec_helpers.sh + - rspec_simple_job "${RSPEC_OPTS}" allow_failure: true -static-analysis: +rspec-ee quarantine pg9: extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .except-docs + - rspec quarantine pg9 + - .only-ee + variables: + RSPEC_OPTS: "--tag quarantine -- ee/spec/" + +rspec fast_spec_helper: + extends: .rspec-base-pg9 + script: + - bin/rspec spec/fast_spec_helper.rb + +static-analysis: + extends: .only-code-qa-rails-job-base dependencies: ["setup-test-env", "compile-assets", "compile-assets pull-cache"] variables: SETUP_DB: "false" @@ -157,81 +223,48 @@ static-analysis: policy: pull-push downtime_check: - extends: .rake-exec + extends: + - .rake-exec + - .only-code-changes except: refs: - master - tags - - /^[\d-]+-stable(-ee)?$/ - - /(^docs[\/-].+|.+-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ + variables: + - $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ stage: test dependencies: ["setup-test-env"] needs: ["setup-test-env"] -ee_compat_check: - extends: .rake-exec - dependencies: [] - except: - refs: - - master - - tags - - branches@gitlab-org/gitlab-ee - - branches@gitlab/gitlab-ee - - /^[\d-]+-stable(-ee)?$/ - - /(^docs[\/-].+|.+-docs$)/ - - /^security-/ - artifacts: - name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}" - when: always - expire_in: 10d - paths: - - ee_compat_check/patches/*.patch - -# DB migration, rollback, and seed jobs -db:migrate:reset: +.db-job-base: extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .use-pg - - .except-docs-qa + - .only-code-rails-job-base + - .use-pg9 stage: test dependencies: ["setup-test-env"] needs: ["setup-test-env"] + +# DB migration, rollback, and seed jobs +db:migrate:reset: + extends: .db-job-base script: - bundle exec rake db:migrate:reset db:check-schema: - extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .use-pg - - .except-docs-qa - stage: test - dependencies: ["setup-test-env"] - needs: ["setup-test-env"] + extends: .db-job-base script: - source scripts/schema_changed.sh db:migrate-from-v11.11.0: - extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .use-pg - - .except-docs-qa - stage: test - dependencies: ["setup-test-env"] - needs: ["setup-test-env"] + extends: .db-job-base variables: SETUP_DB: "false" script: - - git fetch https://gitlab.com/gitlab-org/gitlab-ce.git v11.11.0 + - export PROJECT_TO_CHECKOUT="gitlab-foss" + - export TAG_TO_CHECKOUT="v11.11.0" + - '[[ ! -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab"' + - '[[ ! -d "ee/" ]] || export TAG_TO_CHECKOUT="v11.11.0-ee"' + - git fetch https://gitlab.com/gitlab-org/$PROJECT_TO_CHECKOUT.git $TAG_TO_CHECKOUT - git checkout -f FETCH_HEAD - sed -i "s/gem 'oj', '~> 2.17.4'//" Gemfile - sed -i "s/gem 'bootsnap', '~> 1.0.0'/gem 'bootsnap'/" Gemfile @@ -249,31 +282,13 @@ db:migrate-from-v11.11.0: - bundle exec rake db:migrate db:rollback: - extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .use-pg - - .except-docs-qa - stage: test - dependencies: ["setup-test-env"] - needs: ["setup-test-env"] + extends: .db-job-base script: - bundle exec rake db:migrate VERSION=20180101160629 - bundle exec rake db:migrate SKIP_SCHEMA_VERSION_CHECK=true gitlab:setup: - extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .use-pg - - .except-docs-qa - stage: test - dependencies: ["setup-test-env"] - needs: ["setup-test-env"] + extends: .db-job-base variables: SETUP_DB: "false" script: @@ -290,14 +305,7 @@ gitlab:setup: - log/development.log coverage: - # Don't include dedicated-no-docs-no-db-pull-cache-job here since we need to - # download artifacts from all the rspec jobs instead of from setup-test-env only - extends: - - .default-tags - - .default-retry - - .default-cache - - .default-before_script - - .except-docs-qa + extends: .only-code-rails-job-base cache: policy: pull variables: @@ -314,3 +322,11 @@ coverage: - coverage/index.html - coverage/assets/ - tmp/memory_test/ + +db:rollback geo: + extends: + - db:rollback + - .only-ee + script: + - bundle exec rake geo:db:migrate VERSION=20170627195211 + - bundle exec rake geo:db:migrate diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index 5622cd232ca224fc9161963e91632c3040fb402b..e380838ea7d35928fa851d6830d30f913c1bc659 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -1,39 +1,238 @@ -include: - - template: Code-Quality.gitlab-ci.yml - - template: Security/SAST.gitlab-ci.yml - - template: Security/Dependency-Scanning.gitlab-ci.yml - - template: Security/DAST.gitlab-ci.yml +# include: +# - template: Code-Quality.gitlab-ci.yml +# - template: Security/SAST.gitlab-ci.yml +# - template: Security/Dependency-Scanning.gitlab-ci.yml +# - template: Security/DAST.gitlab-ci.yml -.reports: +# We need to duplicate this job's definition because it seems it's impossible to +# override an included `only.refs`. +# See https://gitlab.com/gitlab-org/gitlab/issues/31371. +code_quality: extends: - .default-retry - - .except-docs - -code_quality: - extends: .reports + - .default-only + - .only-code-changes + stage: test + image: docker:stable + allow_failure: true + services: + - docker:stable-dind + variables: + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + script: + - | + if ! docker info &>/dev/null; then + if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then + export DOCKER_HOST='tcp://localhost:2375' + fi + fi + - docker run + --env SOURCE_CODE="$PWD" + --volume "$PWD":/code + --volume /var/run/docker.sock:/var/run/docker.sock + "registry.gitlab.com/gitlab-org/security-products/codequality:12-0-stable" /code + artifacts: + reports: + codequality: gl-code-quality-report.json + expire_in: 1 week + dependencies: [] + except: + variables: + - $CODE_QUALITY_DISABLED +# We need to duplicate this job's definition because it seems it's impossible to +# override an included `only.refs`. +# See https://gitlab.com/gitlab-org/gitlab/issues/31371. +# Once https://gitlab.com/gitlab-org/gitlab/merge_requests/16487 will be deployed +# to GitLab.com, we should be able to use the template and set SAST_DISABLE_DIND: "true". sast: - extends: .reports + extends: + - .default-retry + - .default-only + - .only-code-changes + stage: test + image: docker:stable variables: + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" SAST_BRAKEMAN_LEVEL: 2 - SAST_EXCLUDED_PATHS: qa,spec,doc + SAST_EXCLUDED_PATHS: qa,spec,doc,ee/spec + allow_failure: true + services: + - docker:stable-dind + script: + - export SAST_VERSION=${SP_VERSION:-$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')} + - | + if ! docker info &>/dev/null; then + if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then + export DOCKER_HOST='tcp://localhost:2375' + fi + fi + - | # this is required to avoid undesirable reset of Docker image ENV variables being set on build stage + function propagate_env_vars() { + CURRENT_ENV=$(printenv) + + for VAR_NAME; do + echo $CURRENT_ENV | grep "${VAR_NAME}=" > /dev/null && echo "--env $VAR_NAME " + done + } + - | + docker run \ + $(propagate_env_vars \ + SAST_BANDIT_EXCLUDED_PATHS \ + SAST_ANALYZER_IMAGES \ + SAST_ANALYZER_IMAGE_PREFIX \ + SAST_ANALYZER_IMAGE_TAG \ + SAST_DEFAULT_ANALYZERS \ + SAST_PULL_ANALYZER_IMAGES \ + SAST_BRAKEMAN_LEVEL \ + SAST_FLAWFINDER_LEVEL \ + SAST_GITLEAKS_ENTROPY_LEVEL \ + SAST_GOSEC_LEVEL \ + SAST_EXCLUDED_PATHS \ + SAST_DOCKER_CLIENT_NEGOTIATION_TIMEOUT \ + SAST_PULL_ANALYZER_IMAGE_TIMEOUT \ + SAST_RUN_ANALYZER_TIMEOUT \ + SAST_JAVA_VERSION \ + ANT_HOME \ + ANT_PATH \ + GRADLE_PATH \ + JAVA_OPTS \ + JAVA_PATH \ + JAVA_8_VERSION \ + JAVA_11_VERSION \ + MAVEN_CLI_OPTS \ + MAVEN_PATH \ + MAVEN_REPO_PATH \ + SBT_PATH \ + FAIL_NEVER \ + ) \ + --volume "$PWD:/code" \ + --volume /var/run/docker.sock:/var/run/docker.sock \ + "registry.gitlab.com/gitlab-org/security-products/sast:$SAST_VERSION" /app/bin/run /code artifacts: expire_in: 7 days paths: - gl-sast-report.json + reports: + sast: gl-sast-report.json + dependencies: [] + only: + variables: + - $GITLAB_FEATURES =~ /\bsast\b/ + except: + variables: + - $SAST_DISABLED +# We need to duplicate this job's definition because it seems it's impossible to +# override an included `only.refs`. +# See https://gitlab.com/gitlab-org/gitlab/issues/31371. dependency_scanning: - extends: .reports + extends: + - .default-retry + - .default-only + - .only-code-changes + stage: test + image: docker:stable + variables: + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + allow_failure: true + services: + - docker:stable-dind + script: + - export DS_VERSION=${SP_VERSION:-$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')} + - | + if ! docker info &>/dev/null; then + if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then + export DOCKER_HOST='tcp://localhost:2375' + fi + fi + - | # this is required to avoid undesirable reset of Docker image ENV variables being set on build stage + function propagate_env_vars() { + CURRENT_ENV=$(printenv) + for VAR_NAME; do + echo $CURRENT_ENV | grep "${VAR_NAME}=" > /dev/null && echo "--env $VAR_NAME " + done + } + - | + docker run \ + $(propagate_env_vars \ + DS_ANALYZER_IMAGES \ + DS_ANALYZER_IMAGE_PREFIX \ + DS_ANALYZER_IMAGE_TAG \ + DS_DEFAULT_ANALYZERS \ + DS_EXCLUDED_PATHS \ + DEP_SCAN_DISABLE_REMOTE_CHECKS \ + DS_DOCKER_CLIENT_NEGOTIATION_TIMEOUT \ + DS_PULL_ANALYZER_IMAGE_TIMEOUT \ + DS_RUN_ANALYZER_TIMEOUT \ + DS_PYTHON_VERSION \ + DS_PIP_DEPENDENCY_PATH \ + PIP_INDEX_URL \ + PIP_EXTRA_INDEX_URL \ + ) \ + --volume "$PWD:/code" \ + --volume /var/run/docker.sock:/var/run/docker.sock \ + "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$DS_VERSION" /code + artifacts: + reports: + dependency_scanning: gl-dependency-scanning-report.json + dependencies: [] + only: + variables: + - $GITLAB_FEATURES =~ /\bdependency_scanning\b/ + except: + variables: + - $DEPENDENCY_SCANNING_DISABLED + +# We need to duplicate this job's definition because it seems it's impossible to +# override an included `only.refs`. +# See https://gitlab.com/gitlab-org/gitlab/issues/31371. dast: extends: - - .reports - - .review-only + - .default-retry + - .default-only + - .only-code-qa-changes + - .only-review stage: qa dependencies: ["review-deploy"] before_script: - export DAST_WEBSITE="$(cat review_app_url.txt)" + image: + name: "registry.gitlab.com/gitlab-org/security-products/dast:$CI_SERVER_VERSION_MAJOR-$CI_SERVER_VERSION_MINOR-stable" + variables: + # URL to scan: + # DAST_WEBSITE: https://example.com/ + # + # Time limit for target availability (scan is attempted even when timeout): + # DAST_TARGET_AVAILABILITY_TIMEOUT: 60 + # + # Set these variables to scan with an authenticated user: + # DAST_AUTH_URL: https://example.com/sign-in + # DAST_USERNAME: john.doe@example.com + # DAST_PASSWORD: john-doe-password + # DAST_USERNAME_FIELD: session[user] # the name of username field at the sign-in HTML form + # DAST_PASSWORD_FIELD: session[password] # the name of password field at the sign-in HTML form + # DAST_AUTH_EXCLUDE_URLS: http://example.com/sign-out,http://example.com/sign-out-2 # optional: URLs to skip during the authenticated scan; comma-separated, no spaces in between + # + # Perform ZAP Full Scan, which includes both passive and active scanning: + # DAST_FULL_SCAN_ENABLED: "true" + allow_failure: true + script: + - export DAST_WEBSITE=${DAST_WEBSITE:-$(cat environment_url.txt)} + - /analyze -t $DAST_WEBSITE artifacts: expire_in: 7 days paths: - gl-dast-report.json + reports: + dast: gl-dast-report.json + only: + variables: + - $GITLAB_FEATURES =~ /\bdast\b/ + except: + variables: + - $DAST_DISABLED diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index 5db194e06f7fc081b15f27d65909aa118aad7b68..610b0678db1409080155e90371583ba6444d52da 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -1,30 +1,15 @@ -.review-schedules-only: - only: - refs: - - schedules@gitlab-org/gitlab-ce - - schedules@gitlab-org/gitlab-ee - kubernetes: active - variables: - - $REVIEW_APP_CLEANUP +.except-deploys: except: refs: - - tags - - /(^docs[\/-].+|.+-docs$)/ - -.review-base: - extends: - - .default-tags - - .default-retry - - .review-only - image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base - dependencies: [] - before_script: - - source scripts/utils.sh + - /^[\d-]+-stable(-ee)?$/ + - /^\d+-\d+-auto-deploy-\d+$/ .review-docker: extends: - .default-tags - .default-retry + - .default-only + - .except-deploys image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine services: - docker:19.03.0-dind @@ -34,24 +19,48 @@ variables: DOCKER_DRIVER: overlay2 DOCKER_HOST: tcp://docker:2375 - LATEST_QA_IMAGE: "gitlab/${CI_PROJECT_NAME}-qa:nightly" - QA_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/${CI_PROJECT_NAME}-qa:${CI_COMMIT_REF_SLUG}" + GITLAB_EDITION: "ce" build-qa-image: extends: - .review-docker - - .except-docs + - .only-code-qa-changes only: - refs: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee - stage: test + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + stage: prepare script: - - time docker build --cache-from ${LATEST_QA_IMAGE} --tag ${QA_IMAGE} --file ./qa/Dockerfile ./ + - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' + - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/gitlab-${GITLAB_EDITION}-qa:${CI_COMMIT_REF_SLUG}" + - time docker build --cache-from gitlab/gitlab-${GITLAB_EDITION}-qa:nightly --tag ${QA_IMAGE} --file ./qa/Dockerfile ./ - echo "${CI_JOB_TOKEN}" | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} - time docker push ${QA_IMAGE} +schedule:review-cleanup: + extends: + - .default-tags + - .default-retry + - .default-only + - .only-code-qa-changes + - .only-review-schedules + - .except-deploys + stage: prepare + image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base + allow_failure: true + environment: + name: review/auto-cleanup + action: stop + before_script: + - source scripts/utils.sh + - install_gitlab_gem + script: + - ruby -rrubygems scripts/review_apps/automated_cleanup.rb + .review-build-cng-base: + extends: + - .default-only + - .only-code-qa-changes + - .except-deploys image: ruby:2.6-alpine stage: review-prepare before_script: @@ -65,28 +74,37 @@ build-qa-image: review-build-cng: extends: - .review-build-cng-base - - .review-only + - .only-review needs: ["gitlab:assets:compile pull-cache"] schedule:review-build-cng: extends: - .review-build-cng-base - - .review-schedules-only + - .only-review-schedules needs: ["gitlab:assets:compile"] .review-deploy-base: - extends: .review-base - allow_failure: true + extends: + - .default-tags + - .default-retry + - .default-only + - .only-code-qa-changes + - .except-deploys stage: review + image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base + dependencies: [] + allow_failure: true variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" GITLAB_HELM_CHART_REF: "master" + GITLAB_EDITION: "ce" environment: name: review/${CI_COMMIT_REF_NAME} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} on_stop: review-stop before_script: + - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' - export GITLAB_SHELL_VERSION=$( ${NEW_PARALLEL_SPECS_REPORT}' - - scripts/merge-html-reports ${NEW_PARALLEL_SPECS_REPORT} ${BASE_ARTIFACT_URL}${ARTIFACT_DIRS} qa/gitlab-qa-run-*/**/rspec.htm + performance: performance.json review-performance: - extends: .review-qa-base - allow_failure: true + extends: + - .review-performance-base + - .only-review before_script: - export CI_ENVIRONMENT_URL="$(cat review_app_url.txt)" - echo "${CI_ENVIRONMENT_URL}" @@ -241,30 +257,47 @@ review-performance: schedule:review-performance: extends: - - review-performance - - .review-schedules-only + - .review-performance-base + - .only-review-schedules dependencies: ["schedule:review-deploy"] -schedule:review-cleanup: +parallel-spec-reports: extends: - - .review-base - - .review-schedules-only - stage: build + - .default-tags + - .default-only + - .only-code-qa-changes + - .only-review + - .except-deploys + image: ruby:2.6-alpine + stage: post-test + dependencies: ["review-qa-all"] + variables: + NEW_PARALLEL_SPECS_REPORT: qa/report-new.html + BASE_ARTIFACT_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/file/qa/" allow_failure: true - environment: - name: review/auto-cleanup - action: stop - before_script: - - source scripts/utils.sh - - install_gitlab_gem + when: manual + artifacts: + when: always + paths: + - qa/report-new.html + - qa/gitlab-qa-run-* + reports: + junit: qa/gitlab-qa-run-*/**/rspec-*.xml script: - - ruby -rrubygems scripts/review_apps/automated_cleanup.rb + - apk add --update build-base libxml2-dev libxslt-dev && rm -rf /var/cache/apk/* + - gem install nokogiri --no-document + - cd qa/gitlab-qa-run-*/gitlab-* + - ARTIFACT_DIRS=$(pwd |rev| awk -F / '{print $1,$2}' | rev | sed s_\ _/_) + - cd - + - '[[ -f $NEW_PARALLEL_SPECS_REPORT ]] || echo "{}" > ${NEW_PARALLEL_SPECS_REPORT}' + - scripts/merge-html-reports ${NEW_PARALLEL_SPECS_REPORT} ${BASE_ARTIFACT_URL}${ARTIFACT_DIRS} qa/gitlab-qa-run-*/**/rspec.htm danger-review: extends: - .default-tags - .default-retry - .default-cache + - .default-only image: registry.gitlab.com/gitlab-org/gitlab-build-images:danger stage: test dependencies: [] @@ -274,10 +307,9 @@ danger-review: except: refs: - master - - /^\d+-\d+-auto-deploy-\d+$/ - - /^[\d-]+-stable(-ee)?$/ - - /^ce-to-ee-.*/ - - /.*-stable(-ee)?-prepare-.*/ + variables: + - $CI_COMMIT_REF_NAME =~ /^\d+-\d+-auto-deploy-\d+$/ + - $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ script: - git version - node --version diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml index cd7ca4d30bf50d467fae3127f09e8526fd795e9d..861f3f1af5b4ed5880db17a405b26f46585a693f 100644 --- a/.gitlab/ci/setup.gitlab-ci.yml +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -6,7 +6,7 @@ cache gems: - .default-retry - .default-cache - .default-before_script - - .except-docs + - .only-code-qa-changes stage: test dependencies: ["setup-test-env"] needs: ["setup-test-env"] @@ -19,15 +19,17 @@ cache gems: - vendor/cache only: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee + - master - tags + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" .minimal-job: extends: - .default-tags - .default-retry - - .except-docs-qa + - .default-only + - .only-code-changes dependencies: [] gitlab_git_test: @@ -40,5 +42,7 @@ no_ee_check: script: - scripts/no-ee-check only: - refs: - - branches@gitlab-org/gitlab-ce + variables: + - $CI_PROJECT_NAME == "gitlab-foss" + - $CI_PROJECT_NAME == "gitlab-ce" # Support former project name for forks/mirrors + - $CI_PROJECT_NAME == "gitlabhq" # Support former project name for dev diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index b9dac64957e399eebba6f452536b5b2888544b5d..6a7f3157d593f4afbaae20a37a713482f534f67d 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -1,8 +1,16 @@ .tests-metadata-state: + extends: + - .default-only + - .only-code-changes variables: TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache" before_script: - source scripts/utils.sh + cache: + key: tests_metadata + paths: + - knapsack/ + - rspec_flaky/ artifacts: expire_in: 31d paths: @@ -11,53 +19,36 @@ - rspec_profiling/ retrieve-tests-metadata: - extends: - - .tests-metadata-state - - .except-docs-qa + extends: .tests-metadata-state stage: prepare cache: - key: tests_metadata policy: pull script: - - mkdir -p knapsack/${CI_PROJECT_NAME}/ - - wget -O $KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $KNAPSACK_RSPEC_SUITE_REPORT_PATH - - '[[ -f $KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH}' - - mkdir -p rspec_flaky/ - - mkdir -p rspec_profiling/ - - wget -O $FLAKY_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$FLAKY_RSPEC_SUITE_REPORT_PATH || rm $FLAKY_RSPEC_SUITE_REPORT_PATH - - '[[ -f $FLAKY_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_SUITE_REPORT_PATH}' + - source scripts/rspec_helpers.sh + - retrieve_tests_metadata update-tests-metadata: extends: .tests-metadata-state stage: post-test cache: - key: tests_metadata - paths: - - knapsack/ - - rspec_flaky/ policy: push script: - retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document - - echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} - - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_*_pg_node_*.json - - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' - - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json - - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json - - FLAKY_RSPEC_GENERATE_REPORT=1 scripts/prune-old-flaky-specs ${FLAKY_RSPEC_SUITE_REPORT_PATH} - - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $FLAKY_RSPEC_SUITE_REPORT_PATH' - - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json - - scripts/insert-rspec-profiling-data + - source scripts/rspec_helpers.sh + - update_tests_metadata only: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - master@gitlab/gitlabhq - - master@gitlab/gitlab-ee + - schedules + variables: + # Only update the Knapsack metadata on GitLab.com/gitlab-org/gitlab + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_PATH == "gitlab-org/gitlab" flaky-examples-check: extends: - .default-tags - .default-retry + - .default-only + - .only-code-changes image: ruby:2.6-alpine stage: post-test variables: @@ -65,12 +56,7 @@ flaky-examples-check: allow_failure: true only: refs: - - branches - except: - refs: - - master - - /(^docs[\/-].+|.+-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ + - merge_requests artifacts: expire_in: 30d paths: diff --git a/.gitlab/ci/yaml.gitlab-ci.yml b/.gitlab/ci/yaml.gitlab-ci.yml index dd61cb3f035e32fe42239a04ff74520632cb7e93..323f94b6d04b2ccba2707a74bc2fbf2541760765 100644 --- a/.gitlab/ci/yaml.gitlab-ci.yml +++ b/.gitlab/ci/yaml.gitlab-ci.yml @@ -4,7 +4,10 @@ lint-ci-gitlab: extends: - .default-tags - .default-retry - - .except-docs + - .default-only + only: + changes: + - "**/*.yml" image: sdesbure/yamllint:latest dependencies: [] script: diff --git a/.gitlab/issue_templates/Acceptance_Testing.md b/.gitlab/issue_templates/Acceptance_Testing.md index f1fbb96ce6115a9a6db5708081b97078f801f73d..5a6c35f28ad208ea5de7e9eb7acc08de502ecada 100644 --- a/.gitlab/issue_templates/Acceptance_Testing.md +++ b/.gitlab/issue_templates/Acceptance_Testing.md @@ -25,7 +25,7 @@ Then leave running while monitoring and performing some testing through web, api - [ ] [Monitor Using Grafana](https://dashboards.gitlab.net) - [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana) -- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlap.com/gitlab/devgitlaborg/?query=is%3Aunresolved) +- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlab.net/gitlab/devgitlaborg/?query=is%3Aunresolved) ## 2. Staging Trial @@ -41,7 +41,7 @@ Then leave running while monitoring for at least **15 minutes** while performing - [ ] [Monitor Using Grafana](https://dashboards.gitlab.net) - [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana) -- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved) +- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved) ## 4. Production Server Version Check @@ -57,7 +57,7 @@ Then leave running while monitoring for at least **15 minutes** while performing - [ ] [Monitor Using Grafana](https://dashboards.gitlab.net) - [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana) -- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved) +- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved) ## 6. Low Impact Check @@ -69,7 +69,7 @@ Then leave running while monitoring for at least **30 minutes** while performing - [ ] [Monitor Using Grafana](https://dashboards.gitlab.net) - [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana) -- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved) +- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved) ## 7. Mid Impact Trial @@ -81,7 +81,7 @@ Then leave running while monitoring for at least **12 hours** while performing s - [ ] [Monitor Using Grafana](https://dashboards.gitlab.net) - [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana) -- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlap.com/gitlab/gitlabcom/?query=is%3Aunresolved) +- [ ] [Check for errors in GitLab Sentry](https://sentry.gitlab.net/gitlab/gitlabcom/?query=is%3Aunresolved) ## 8. Full Impact Trial @@ -93,7 +93,7 @@ Then leave running while monitoring for at least **1 week**. - [ ] [Monitor Using Grafana](https://dashboards.gitlab.net) - [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana) -- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlap.com/gitlab/devgitlaborg/?query=is%3Aunresolved) +- [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlab.net/gitlab/devgitlaborg/?query=is%3Aunresolved) #### Success? diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md index 3adea22b33a66d8279f23f266d57ef1eebe9aafa..0d9990657e46e4aefbfdf5761fa4ac33776e3ee3 100644 --- a/.gitlab/issue_templates/Bug.md +++ b/.gitlab/issue_templates/Bug.md @@ -2,17 +2,10 @@ Please read this! Before opening a new issue, make sure to search for keywords in the issues -filtered by the "regression" or "bug" label. +filtered by the "regression" or "bug" label: -For the Community Edition issue tracker: - -- https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name%5B%5D=regression -- https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name%5B%5D=bug - -For the Enterprise Edition issue tracker: - -- https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name%5B%5D=regression -- https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name%5B%5D=bug +- https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=regression +- https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=bug and verify the issue you're about to submit isn't a duplicate. ---> diff --git a/.gitlab/issue_templates/Coding style proposal.md b/.gitlab/issue_templates/Coding style proposal.md index 1a3be44bea02f8c8aa19a88ee1e1f043e15e0379..a969c9b72ee84cc3da652143a9cabdf34ae79828 100644 --- a/.gitlab/issue_templates/Coding style proposal.md +++ b/.gitlab/issue_templates/Coding style proposal.md @@ -11,6 +11,6 @@ Please describe the proposal and add a link to the source (for example, http://w /label ~"development guidelines" /label ~"Style decision" -/label ~Documentation +/label ~documentation /cc @gitlab-org/maintainers/rails-backend diff --git a/.gitlab/issue_templates/Doc Review.md b/.gitlab/issue_templates/Doc Review.md index 14ab0c82d59fbc19f7375033f92262235cb334af..5b470ed7c75e3bafd75057b7e71c87b0ef3fc6bf 100644 --- a/.gitlab/issue_templates/Doc Review.md +++ b/.gitlab/issue_templates/Doc Review.md @@ -8,13 +8,13 @@ ## References -Merged MR that introduced documentation requiring review: +Merged MR that introduced documentation requiring review: -Related issue(s): +Related issue(s): ## Further Details -/label ~Documentation ~docs-review +/label ~documentation ~"Technical Writing" diff --git a/.gitlab/issue_templates/Documentation.md b/.gitlab/issue_templates/Documentation.md index f4070a447550dd1c97c511a9d6972b2bb2d89396..43ee7cd448bd90b87c53c83d931f18b5b0bc2538 100644 --- a/.gitlab/issue_templates/Documentation.md +++ b/.gitlab/issue_templates/Documentation.md @@ -2,23 +2,13 @@ * Use this issue template for suggesting new docs or updates to existing docs. Note: Doc work as part of feature development is covered in the Feature Request template. - + * For issues related to features of the docs.gitlab.com site, see - https://gitlab.com/gitlab-org/gitlab-docs/issues/ + https://gitlab.com/gitlab-org/gitlab-docs/issues/ * For information about documentation content and process, see https://docs.gitlab.com/ee/development/documentation/ --> - - - - - - - - - ### Problem to solve -/label ~Documentation +/label ~documentation diff --git a/.gitlab/issue_templates/Feature Flag Roll Out.md b/.gitlab/issue_templates/Feature Flag Roll Out.md index 0cac769bd55ba6874ddda2fb499a2dbbd65691de..e0de8fab4a7054a9bcb926803c833eecde495e3e 100644 --- a/.gitlab/issue_templates/Feature Flag Roll Out.md +++ b/.gitlab/issue_templates/Feature Flag Roll Out.md @@ -24,7 +24,7 @@ Remove the `:feature_name` feature flag ... If applicable, any groups/projects that are happy to have this feature turned on early. Some organizations may wish to test big changes they are interested in with a small subset of users ahead of time for example. -- `gitlab-org/gitlab-ce`/`gitlab-org/gitlab-ee` projects +- `gitlab-org/gitlab` project - `gitlab-org`/`gitlab-com` groups - ... @@ -34,6 +34,7 @@ If applicable, any groups/projects that are happy to have this feature turned on - [ ] Test on staging - [ ] Ensure that documentation has been updated - [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour +- [ ] Coordinate a time to enable the flag with `#production` and `#g_delivery` on slack. - [ ] Announce on the issue an estimated time this will be enabled on GitLab.com - [ ] Enable on GitLab.com by running chatops command in `#production` - [ ] Cross post chatops slack command to `#support_gitlab-com` and in your team channel diff --git a/.gitlab/issue_templates/Feature proposal.md b/.gitlab/issue_templates/Feature proposal.md index 68f60cb52d497f0d66b30d9e2fe27e5e3208b589..2d6d03c313ca0c3ce8b60e719b7bb983f33502bb 100644 --- a/.gitlab/issue_templates/Feature proposal.md +++ b/.gitlab/issue_templates/Feature proposal.md @@ -43,6 +43,10 @@ If this feature requires changing permissions, this document https://docs.gitlab +### What is the type of buyer? + + + ### Links / references /label ~feature diff --git a/.gitlab/issue_templates/Problem_Validation.md b/.gitlab/issue_templates/Problem_Validation.md new file mode 100644 index 0000000000000000000000000000000000000000..7440b41cf0b95925ee21551758d5616aa0f44b4d --- /dev/null +++ b/.gitlab/issue_templates/Problem_Validation.md @@ -0,0 +1,41 @@ +## Problem Statement + + + +## Reach + + + + + +## Impact + + + +## Confidence + + + +## Effort + + + +/label ~"workflow::problem backlog" diff --git a/.gitlab/issue_templates/Security Release.md b/.gitlab/issue_templates/Security Release.md index 3e60274623e4ee939f7cf7799f6e9272a46fd610..e6e5d731d96312227dbcef8c18ea685484ca9a71 100644 --- a/.gitlab/issue_templates/Security Release.md +++ b/.gitlab/issue_templates/Security Release.md @@ -18,13 +18,7 @@ Set the title to: `Security Release: 12.2.X, 12.1.X, and 12.0.X` ## Security Issues: -### CE - -* {https://gitlab.com/gitlab-org/gitlab-ce/issues link} - -### EE - -* {https://gitlab.com/gitlab-org/gitlab-ee/issues link} +* {https://gitlab.com/gitlab-org/gitlab/issues link} ## Security Issues in dev.gitlab.org: diff --git a/.gitlab/issue_templates/Test plan.md b/.gitlab/issue_templates/Test plan.md index f194adebc873cd655d4b2f072a81d8e14156a6be..a202c0bf546e0e450bd62369548d8a886f7ca6d5 100644 --- a/.gitlab/issue_templates/Test plan.md +++ b/.gitlab/issue_templates/Test plan.md @@ -2,7 +2,7 @@ @@ -63,7 +63,7 @@ intersection of Components and Attributes. Some features might be simple enough that they only involve one Component, while more complex features could involve multiple or even all. -Example (from https://gitlab.com/gitlab-org/gitlab-ce/issues/50353): +Example (from https://gitlab.com/gitlab-org/gitlab-foss/issues/50353): * Repository is * Intuitive * It's easy to select the desired file template diff --git a/.gitlab/merge_request_templates/Change documentation location.md b/.gitlab/merge_request_templates/Change documentation location.md index 7dc80a641c46473e1f6fbb3c554638bce6a61430..f18957fdaaa3007cf68cb579ec3e9c6da9d75554 100644 --- a/.gitlab/merge_request_templates/Change documentation location.md +++ b/.gitlab/merge_request_templates/Change documentation location.md @@ -10,12 +10,12 @@ -Closes +Closes ## Moving docs to a new location? Read the guidelines: -https://docs.gitlab.com/ce/development/documentation/index.html#changing-document-location +https://docs.gitlab.com/ee/development/documentation/index.html#changing-document-location - [ ] Make sure the old link is not removed and has its contents replaced with a link to the new location. @@ -29,4 +29,4 @@ https://docs.gitlab.com/ce/development/documentation/index.html#changing-documen with the changes as well (https://docs.gitlab.com/ce/development/documentation/index.html#cherry-picking-from-ce-to-ee). - [ ] Ping one of the technical writers for review. -/label ~Documentation +/label ~documentation diff --git a/.gitlab/merge_request_templates/Database changes.md b/.gitlab/merge_request_templates/Database changes.md index 2077997a0cb67e94440b252632c92682b1761a6f..89c8c7a5d07ad41e0eaf93f13deb1504a74a23cd 100644 --- a/.gitlab/merge_request_templates/Database changes.md +++ b/.gitlab/merge_request_templates/Database changes.md @@ -24,6 +24,7 @@ When adding migrations: - [ ] Added a `down` method so the migration can be reverted - [ ] Added the output of the migration(s) to the MR body - [ ] Added tests for the migration in `spec/migrations` if necessary (e.g. when migrating data) +- [ ] Added rollback procedure. Include either a rollback procedure or description how to rollback changes When adding or modifying queries to improve performance: @@ -37,7 +38,7 @@ When adding foreign keys to existing tables: When adding tables: -- [ ] Ordered columns based on the [Ordering Table Columns](https://docs.gitlab.com/ee/development/ordering_table_columns.html#ordering-table-columns) guidelines +- [ ] Ordered columns based on the [Ordering Table Columns](https://docs.gitlab.com/ee/development/ordering_table_columns.html) guidelines - [ ] Added foreign keys to any columns pointing to data in other tables - [ ] Added indexes for fields that are used in statements such as `WHERE`, `ORDER BY`, `GROUP BY`, and `JOIN`s diff --git a/.gitlab/merge_request_templates/Documentation.md b/.gitlab/merge_request_templates/Documentation.md index e502614b5ca19069196912000881a53bf0c7f41c..a2dd79ed1abd6b9324f19ffd328135cbc94b1bb7 100644 --- a/.gitlab/merge_request_templates/Documentation.md +++ b/.gitlab/merge_request_templates/Documentation.md @@ -1,5 +1,5 @@ - + @@ -17,7 +17,7 @@ - [ ] Follow the [Documentation Guidelines](https://docs.gitlab.com/ee/development/documentation/) and [Style Guide](https://docs.gitlab.com/ee/development/documentation/styleguide.html). - [ ] If applicable, update the [permissions table](https://docs.gitlab.com/ee/user/permissions.html). - [ ] Link docs to and from the higher-level index page, plus other related docs where helpful. -- [ ] Apply the ~Documentation label. +- [ ] Apply the ~documentation label. ## Review checklist @@ -26,7 +26,7 @@ All reviewers can help ensure accuracy, clarity, completeness, and adherence to **1. Primary Reviewer** * [ ] Review by a code reviewer or other selected colleague to confirm accuracy, clarity, and completeness. This can be skipped for minor fixes without substantive content changes. - + **2. Technical Writer** * [ ] Optional: 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). @@ -35,6 +35,6 @@ All reviewers can help ensure accuracy, clarity, completeness, and adherence to 1. [ ] Review by assigned maintainer, who can always request/require the above reviews. Maintainer's review can occur before or after a technical writer review. 1. [ ] Ensure a release milestone is set and that you merge the equivalent EE MR before the CE MR if both exist. -1. [ ] If there has not been a technical writer review, [create an issue for one using the Doc Review template](https://gitlab.com/gitlab-org/gitlab-ce/issues/new?issuable_template=Doc%20Review). +1. [ ] If there has not been a technical writer review, [create an issue for one using the Doc Review template](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review). -/label ~Documentation +/label ~documentation diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index d29cb8aa0b02323560b2be7e8bcae4375e344a24..8f8cbc2072a0199e90c997b58d2d2b1b1d4a77c4 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -208,6 +208,8 @@ linters: - 'app/views/projects/_md_preview.html.haml' - 'app/views/projects/_new_project_fields.html.haml' - 'app/views/projects/_readme.html.haml' + - 'app/views/projects/artifacts/_artifact.html.haml' + - 'app/views/projects/artifacts/_search_bar.html.haml' - 'app/views/projects/artifacts/_tree_file.html.haml' - 'app/views/projects/artifacts/browse.html.haml' - 'app/views/projects/blame/_age_map_legend.html.haml' diff --git a/.license_encryption_key.pub b/.license_encryption_key.pub new file mode 100644 index 0000000000000000000000000000000000000000..68f241b9741696e3c2e49ba5c9a1b0726fc2f727 --- /dev/null +++ b/.license_encryption_key.pub @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Hxv3MkkZbMrKtIs6np9 +ccP4OwGBkNhIvhPjcQP48hbbascv5RqsOquQGrYSD2ZrE/kbkRdkIcoHEeTZLif+ +bDKFZFI7o5x0H92o9/GSvxHJhQ8mkmvwxD7lssGShwZEm8WG+U7BZqUV/gGmCDqe +9W8H8Fq2B0ck8IXjbQ4Zz+JlyV/NHZTZcs69plFiLKh4N6GYVftOVwSomh0bbypP +OB9WnLC7RC9a2LRrhtf8sqa2rRFmtyMMfgFFzLMzS+w+1K4+QLnWP1gKQVzaFnzk +pnwKPrqbGFYbRztIVEWbs8jPYlLkGb8ME4C84YVtQgbQcbyisU/VW3wUGkhT+J0k +xwIDAQAB +-----END PUBLIC KEY----- diff --git a/.projections.json.example b/.projections.json.example new file mode 100644 index 0000000000000000000000000000000000000000..7ea0862f56abd11d58cdacf4e82ffd3fcd37d3ec --- /dev/null +++ b/.projections.json.example @@ -0,0 +1,36 @@ +{ + "app/*.rb": { + "alternate": "spec/{}_spec.rb", + "type": "source" + }, + "spec/*_spec.rb": { + "alternate": "app/{}.rb", + "type": "test" + }, + "lib/*.rb": { + "alternate": "spec/lib/{}_spec.rb", + "type": "source" + }, + "spec/lib/*_spec.rb": { + "alternate": "lib/{}.rb", + "type": "test" + }, + "ee/app/*.rb": { + "alternate": "ee/spec/{}_spec.rb", + "type": "source" + }, + "ee/spec/*_spec.rb": { + "alternate": "ee/app/{}.rb", + "type": "test" + }, + "ee/lib/*.rb": { + "alternate": "ee/spec/lib/{}_spec.rb", + "type": "source" + }, + "ee/spec/lib/*_spec.rb": { + "alternate": "ee/lib/{}.rb", + "type": "test" + }, + "*.rb": {"dispatch": "bundle exec rubocop {file}"}, + "*_spec.rb": {"dispatch": "bundle exec rspec {file}"} +} diff --git a/.rubocop.yml b/.rubocop.yml index 73743ebf9a2c167d3f9d7542c95943f2ac5c9e4f..45464ca3318a68b277a9effaa909ca0ddc8bf543 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -218,6 +218,12 @@ ActiveRecordAssociationReload: - 'spec/**/*' - 'ee/spec/**/*' +Naming/PredicateName: + Enabled: true + Exclude: + - 'spec/**/*' + - 'ee/spec/**/*' + RSpec/FactoriesInMigrationSpecs: Enabled: true Include: @@ -275,8 +281,15 @@ RSpec/BeSuccessMatcher: - 'ee/spec/support/shared_examples/controllers/**/*' - 'spec/support/controllers/**/*' - 'ee/spec/support/controllers/**/*' + Scalability/FileUploads: Enabled: true Include: - 'lib/api/**/*.rb' - 'ee/lib/api/**/*.rb' + +Graphql/Descriptions: + Enabled: true + Include: + - 'app/graphql/**/*' + - 'ee/app/graphql/**/*' diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index f1f8ff6e86271c5288039fa543ecef2594a7bd8a..81bb28dacab877cf483f625501dc8a0460a053f2 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -442,19 +442,6 @@ Rails/LinkToBlank: - 'ee/app/helpers/ee/user_callouts_helper.rb' - 'ee/app/helpers/license_helper.rb' -# Offense count: 11 -# Cop supports --auto-correct. -Rails/Presence: - Exclude: - - 'app/models/ci/pipeline.rb' - - 'app/models/concerns/mentionable.rb' - - 'app/models/project_services/hipchat_service.rb' - - 'app/models/project_services/irker_service.rb' - - 'app/models/project_services/jira_service.rb' - - 'app/models/project_services/packagist_service.rb' - - 'app/models/wiki_page.rb' - - 'lib/gitlab/github_import/importer/releases_importer.rb' - # Offense count: 1 # Cop supports --auto-correct. # Configuration parameters: Include. @@ -565,11 +552,6 @@ Style/EmptyLiteral: Style/EmptyMethod: Enabled: false -# Offense count: 40 -# Cop supports --auto-correct. -Style/Encoding: - Enabled: false - # Offense count: 203 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. diff --git a/CHANGELOG-EE.md b/CHANGELOG-EE.md new file mode 100644 index 0000000000000000000000000000000000000000..5bd8f7166bbd70d702425052328cc2d00a3c88a1 --- /dev/null +++ b/CHANGELOG-EE.md @@ -0,0 +1,5310 @@ +Please view this file on the master branch, on stable branches it's out of date. + +## 12.3.2 + +### Security (2 changes) + +- Hide approvers if a rule has any hidden groups. +- Prevent IDOR when adding groups to protected environments. + + +## 12.3.1 + +- No changes. + +## 12.3.0 + +### Security (3 changes) + +- Limit number of jobs in running pipelines for the past hour on per plan basis. !1182 +- Filter out old system notes for epics in notes api endpoint response. +- Do not allow creation of projects from group templates if project is not descendant of that group. + +### Removed (1 change) + +- Remove Ruby Elasticsearch indexer. !15641 + +### Fixed (53 changes, 5 of them are from the community) + +- LDAP group sync: check parent group membership and improve performance. !13435 (Alex Lossent) +- Added a migration which fixes discussions for existing promoted epics. !14708 +- Fix Docker Registry access when Group SAML session enforcement is active. !14843 +- Fix missing borders between settings items. !14877 +- SCIM uses fallbacks when name.formatted not present. !14878 +- Fix visibility of link to dependency-list in project sidebar based on permissions. !15066 +- Hide info for unlicensed projects on Ops Dashboard. !15099 +- Fix focus-visibility of vulnerability-actions within security dashboard. !15115 +- Resolve Design viewer does not respect version. !15119 +- Fix bug to display alert menu correctly in dashboards. !15261 +- Allow developer role to access group-level templates when creating a new project. !15364 +- Maintain related issues after moving issue. !15391 +- Fix the documentation link on the empty Dependency List page. !15402 +- Fix broken docs link on security dashboard. !15404 +- Change epics count in sidebar to only count open epics. !15459 +- Include ancestor group labels in autocomplete for epics. !15460 +- Enable target users across all feature flag environment scopes. !15500 +- Change payload for comparing security reports in MR widget. !15531 +- Add space between CI usage warning messages. !15563 (briankabiro) +- Make sure groups with templates finder returns subgroups. !15631 +- Properly delete files when a package is removed. !15634 +- Fix x-axis burndown chart offset by timezone. !15690 +- Resolve SRV records for DB load balancing. !15691 +- Ensure all CI minutes used are reset for all namespaces and relative projects. !15744 +- Show proper error in SCIM create user endpoint. !15756 +- Update permissions on Dependency List page. !15771 +- Allow ancestor group milestones in issue board scope. !15858 +- Show weight on new board issue. !16028 (Lee Tickett) +- Do not show 'automatically removed' suffix for manually removed labels. !16079 +- Link to the embedded doc in the Geo callout about hashed storage. !16114 +- Fix LFS authentication URL in EE. !16146 +- Prevent project's approval rules having same name. !16216 +- Fix create issue for container scanning from security dashboard. !16226 +- Add current_user to security report comparison services. !16252 +- Fix setting of weight of a new issue in board list. !16299 +- Update ExternalPullRequest on :synchronize action to ensure source_sha is updated locally. !16318 +- Fix wrong tier error message for Operations dashboard. !16319 +- Perform case insensitive diff on license names. !16335 +- Moves Buy additional minutes button to the pipelines tab. !16443 +- Update GitHub Importer Personal Access Token field description for CI/CD projects only to reflect latest OAuth changes. !16453 +- Use Pull Request number instead of internal Pull Request ID. !16504 +- Fix service desk emails not creating issues intermittently. !16577 +- Reinitialize metrics files on webserver master process start. !16623 +- Fix the group's epic page. The Paste issue link placeholder shown as 'undefinedundefinedundefined' in Chinese environment. And the error message showed nothing. !16628 (wdmcheng) +- Fix issue redirects going to /issues/:id/designs. !16638 +- Eliminate analytics feature flag requirement for /analytics routes. !16663 +- Match environment names case insensitively for feature flag spec search. !16691 +- Fix merge request redirects going to /commits page. !16705 +- Align text color for edited with issue/mr. !16721 +- Added Packages top item to the group level packages fly out navigation menu. !16791 +- Restores data for assignee changes in merge request webhooks. !16812 (Jesse Hall @jessehall3) +- Fix alignment of comments count in issue and MR lists. !16829 +- Wait until pipeline is completed before checking for software license violations. !16853 + +### Changed (27 changes, 1 of them is from the community) + +- Geo: Refactor data-sources to allow for replication of content in Object Storage. !13997 +- Improve UX multi assignees in MR. !14851 +- Add ability to block API pushes to protected branches when contents match CODEOWNERS rule. !14900 +- Add browser notications to add/edit/delete vulnability dismissal reasons. !15015 +- Geo: Add orphaned project registry cleaner. !15021 +- Update Security Dashboard for improved usability. !15050 +- Present SAST report comparison logic to backend. !15114 +- Ensure design notifications are sent. !15250 +- Apply the group setting "Restrict access by IP address" to API requests. !15282 +- Hide boards-switcher on group boards. !15293 (briankabiro) +- Group Security Dashboard shows projects with security reports only. !15334 +- Use GlEmptyState component for design management empty state. !15374 +- DB Load Balancing: Log Prometheus current number of hosts and current index. !15440 +- Clarify SSO enforcement setting behaviour. !15533 +- DB Load Balancing: Support SRV lookups. !15558 +- Add status checking behaviors to pipeline triggers. !15580 +- Only show Service Desk email address to project members. !15676 +- Use static status check names on GitHub integrations. !15737 +- Display the Security Dashboard in the Security tab of the pipeline view. !15824 +- Remove primary button from feature flags empty state and update text. !15841 +- Extend License Compliance entity for Pipelines and MR view. !15957 +- Improve DB load balancing log to log host offline due to replication lag. !15995 +- Eliminating `analytics` feature flag and introduce separate feature flags for Analytics features. !16102 +- Add asterisk to name field in new feature flag form. !16248 +- Update Container Scanning job template, use klar image. !16342 +- Improve projects list page UI. !16656 +- Add user feedback to exit routine of onboarding tour. + +### Performance (2 changes) + +- Send only necessary fields on mr-widget auto-refresh. !15495 +- Two step Routable lookup. !16621 + +### Added (46 changes, 1 of them is from the community) + +- Public project-level approval rule API. !13895 +- Support reordering issues and epics using Drag&Drop. !14565 +- Add deletion support for designs. !14656 +- Add Epics select dropdown to Issue sidebar. !14763 +- Edit delete vuln dismissal message. !14770 +- add Productivity Analytics page with basic charts. !14772 +- Add License information to the Dependency List based on current license rules. !14905 +- Adds an api to generate suggestions for username. !15048 +- Add Upgrade button to the User Billing page. !15075 +- Enable "only/except: external_pull_request" with GitHub integration when a pull request is open for the given ref. !15082 +- Allow to filter epics by timeframe or state using GraphQL. !15110 +- Support restricting group access by multiple IP subnets. !15142 +- Merge License info to Dependency List report. !15157 +- Add Licenses info into Dependencies response. !15160 +- Add 'License-Check' approval rule to enforce license compliance policy. !15196 +- Added a toggle to show/hide dismissed vulnerabilities in the security dashboard. !15333 +- Add audit event for archiving & unarchiving projects. !15362 +- Pressing the Escape key now closes designs in Design Management. !15379 +- Expose a count of Notes for a Design in a new notes_count property of DesignType in GraphQL. !15433 +- Implement public MR-level approval rules API. !15441 +- Cancel redundant merge train pipelines. !15450 +- Add vulnerabilities to Dependencies API. !15485 +- Expose a new events property of DesignType in GraphQL that represents the change that happened to a Design within a given version. !15561 +- Add new layout for trial. !15630 +- Track repository pushes as audit events. !15667 +- Create Metadata/Tags table. !15770 +- Allow SmartCard authentication to use SAN extensions. !15773 +- Maximum Users metric in Admin Dashboard includes current active user count. !15810 +- Public MR-level approval state API endpoint. !15859 +- Add secondary lag message on Git push over HTTP. !15901 +- Expose epic_iid in issues API. !15998 +- Refresh license approval check when a license is blacklisted. !16070 +- Disable editing of the 'License-Check' approval rule name. !16149 +- Implement Cluster Environments polling. !16316 +- Support creating project from template via API. !16352 +- Add link to additional shared minutes from pipeline quote overview. !16389 +- Add audit events for protected branches. !16399 +- Geo: Exit LogCursor if it has been failing for too long. !16408 +- Implement design comment counts and current-version status icon indicator. !16416 +- Track page view counts for Cycle Analytics and Productivity Analytics features. !16431 +- Update release blocks to support association of milestones. !16562 +- Set default whitespace diff behaviour. !16570 (Lee Tickett) +- Implement `/zoom` and `/remove_zoom` quick actions. !16609 +- Add Snowplow click tracking for issue sidebar. !16833 +- Upgrade pages to 1.9.0. +- Adds total usage information to the usage quotas page. + +### Other (27 changes, 8 of them are from the community) + +- Update Pipelines Minutes expiry banner to Alert Component. !14786 +- Add internal API for group cluster environments. !15096 +- Rename approval rule. !15140 +- Productivity Analytics: Add error handling for reporting on groups which have no plan. !15291 +- Convert Issue Analytics chart into ECharts. !15389 +- Display group's full name when creating a project from custom group-level project templates. !15392 +- Only in ee available selection entries in user settings adapted to match ce. !15452 (Marc Schwede) +- Rename Approvers field and modal title. !15461 +- Add a tooltip to Add Designs button. !15471 +- Show the paths for groups in groups dropdown. !15513 +- Turn epic dates into one clickable block. !15722 (Lee Tickett) +- Add default route for admin/geo. !15726 (Lee Tickett) +- Improve unapproved MR merge button text. !15745 (Lee Tickett) +- Update the ES indexer to v1.3.0. !15821 +- Groups dropdown: Fix group styles in dropdown. !15839 +- Document SRV handling for DB load balancing. !16000 +- Internationalization of shared/promotions/_promote_audit_events.html.haml. !16033 (Takuya Noguchi) +- Remove vue-resource from service_desk_service.js. !16041 (Lee Tickett) +- Remove unused classes for report comparison. !16045 +- Remove vue-resource from related-issues. !16057 (Lee Tickett) +- Add CI variable for repository languages. !16477 +- SAST template that doesn't rely on Docker-in-Docker. !16487 +- Adding docs for Web IDE Default Commit Options. !16629 +- Adding top border back to snippet files. !16709 +- Remove vue-resource from drafts. (Lee Tickett) +- Changing instance of key-modern icon to key icon. +- Fixes style-lint errors and warnings for EE builds.scss file. + + +## 12.2.6 + +### Security (3 changes) + +- Hide approvers if a rule has any hidden groups. +- Fix Gitaly SearchBlobs flag RPC injection [Gitaly v1.59.3]. +- Prevent IDOR when adding groups to protected environments. + + +## 12.2.5 + +### Security (1 change) + +- Do not allow creation of projects from group templates if project is not descendant of that group. + + +## 12.2.4 + +### Fixed (1 change) + +- Fix group hooks not firing in PostReceive. !15598 + + +## 12.2.3 + +### Security (2 changes) + +- Limit number of jobs in running pipelines for the past hour on per plan basis. !1182 +- Filter out old system notes for epics in notes api endpoint response. + + +## 12.2.2 + +### Security (2 changes) + +- Limit number of jobs in running pipelines for the past hour on per plan basis. !1182 +- Filter out old system notes for epics in notes api endpoint response. + + +## 12.2.1 + +- No changes. + +## 12.2.0 + +### Security (5 changes) + +- Gate MR head_pipeline behind read_pipeline ability. +- Queries for Upload should be scoped by model. +- Grant admin note permissions in epics for maintainers and owners. +- Fix bypass email verification when SCIM user is created via API. +- Do not allow localhost urls in GitHub Integration. + +### Removed (1 change) + +- Removes support for matching on app label for Kubernetes deploy boards, terminals, and pod logs. !14020 + +### Fixed (67 changes, 2 of them are from the community) + +- Fix error when creating issues in scoped boards. !11080 +- Resolve Snowplow tracking for notes does not work in Firefox. !12578 +- Fix License App user count for ultimate. !14055 +- Enable incremental elasticsearch index updates for wikis. !14057 +- Ensure U2F javascript runs on GroupSAML callback. !14262 +- Fix to allow adding multiple instance-level clusters. !14270 +- Initialize chart data in same order as config. !14283 +- Make side-nav expanded when on dependency list. !14314 +- Add anchor to learn-more-button on the dependency list page so it links to the right location in the docs. !14316 +- Un-block UI interactions while Code Quality MR widget is loading. !14323 +- Enforce SSO on subgroups and projects. !14364 +- Fix race condition on merge train that it cannot process merge request sometimes. !14386 +- Fix MWPS/ADMTWPS system notes shows wrong sha. !14397 +- Show position of merge trains in system notes. !14398 +- Respect limited indexing when importing projects. !14413 +- replace dropdown in project cards in Operations Dashboards with a remove icon. !14419 +- Allow blank values for IP restriction setting. !14427 +- Fix weight quick action to support 0 value. !14432 +- Fix cluster health charts on instance level. !14440 +- Fix on_environment scope to not re-order whole query. !14481 +- Tick instance runner after customer purchases additional CI minutes. !14494 +- Fix race condition of `refs/merge` competing overwrite. !14495 +- Fix 'learn more'-link on dependency page. !14496 +- Allow subgroups to use their parent group's custom project templates. !14499 +- Support creating/publishing drafts with commit ID. !14520 +- Do not include milestone attribute when promoting issue to epic. !14532 +- Include Subgroups in Contribution Analytics calcualtions. !14536 +- Fix GeoNode#name backward compatibility. !14564 +- Starting a new discussion only on line without Draft note created on it. !14569 +- Fix reply to discussion on promoted epic. !14576 +- Fix UI breaking on forms on Bootstrap Grid system. !14581 (Takuya Noguchi) +- Geo - Show why node is unhealthy in the rake task to check the health of the secondary node. !14615 +- Fix displaying feature flag names in the audit log. !14621 +- Support emails as ID in SCIM. !14625 +- Fix negative values in burndown charts. !14632 +- Fixes #12780 by avoiding incorrect cached values. !14651 +- Avoid Design Management thumbnails from being distorted/stretched. !14670 +- Support 0 weight in issue sidebar. !14683 +- Adds a downard chevron to Dashboards icon in the header. !14711 +- Handling use case for repeat trial. !14714 +- Fix suggested namespace in deploy boards help text. !14739 +- Fix duplicated issues while sorting by weight. !14750 (Vasiliy Yaklushin) +- Resolve Make sure not to redirect to the onboarding welcome page on mobile devices. !14842 +- Fix Jira DVCS integration not working when project name has dots. !14855 +- Fix the Epics filter bar alignment. !14857 +- Fix max attachment size used in CSV export email messages. !14884 +- Fix issue that caused the "Merge Immediately" option not to be available when merge trains were enabled. !14894 +- Fix error fetching project security dashboard data for maintainers with access to a project but not to its group & fix routing error for project security dashboard for projects not in a group. !14896 +- fix: operation dashboard delete icon tooltip title. !14899 +- Improve help text and docs about custom metrics. !14912 +- Geo - Disable built-in Sidekiq retry for verification workers. !14946 +- Remove visual review app feature flag. !14958 +- Geo - Warn when reusing an existing tracking database. !14981 +- Fix min approvals required for new MR rules. !14988 +- Fix admin notes internationalization text. !15001 +- Batching minutes reset queries to avoid query timeouts. !15002 +- Only show a pull mirror if mirroring is actually enabled. !15049 +- Update epic dates when creating an issue that adds the epic using commands. !15062 +- Show correct historic max user count for a license. !15107 +- Fix job scheduling when extra CI minutes purchased and minutes usage is above application shared Runners minutes limit. !15120 +- Skip ES commit results for deleted projects. !15236 +- Align "New metric" page title correctly to the rest of the page. !15259 +- Bypass push rules for merge to ref service. +- Ensure LDAP Group Sync by Filter normalizes DNs. +- Add support for partial approval in chat message merge request event handler. +- Insights: Only display page config with valid values. +- Shrink empty/loading states for cluster health charts. + +### Changed (33 changes, 2 of them are from the community) + +- Update merge requests section description text on project settings page. !11098 +- First pass at auto remediation changes. !12010 +- Create incident issues by default for alerts. !12814 +- Resolve Move approval user password input from inline to a modal. !14123 +- Add Copy to Clipboard Button to Review App Modal. !14290 +- Remove "Allow merge trains" option from project settings page. !14429 +- Change epics reordering to not update timestamps. !14441 +- Remove feature flag behind MR's multiple assignees. !14506 +- Prioritize mirrors for CI over other mirrors. !14575 +- Move external authorization service API management to EE. !14598 +- Improve default title and description of issues opened from managed Prometheus alerts. !14614 +- Add 'Security & Compliance' as top-level navigation item to the project-sidebar. !14628 +- Add "Security" as nav-item to group-view sidebar. !14639 +- MVC: Group and User Billing Page Improvement - Avatar and Name. !14660 (Ammar Alakkad) +- Geo: Increase HTTP read timeout of proxy requests to 60 s. !14671 +- Show threshold in incident title for gitlab alerts. !14688 +- Expose licence management reports comparison. !14723 +- Move metrics alerts form to modal. !14760 +- Add new documentation and link for automating Visual Review feedback. !14789 +- Expose licence management report for pipeline. !14796 +- Present container scanning report comparison via API. !14898 +- Allow approvals_required to be lower than project. !14902 +- Rename snowplow_collector_uri to snowplow_collector_hostname. !14963 +- Remove duplicated 'New metric' button in prometheus configuration. !14964 +- Remove validation of MR level approval rules in merge requests. !14968 +- Add missing merge request committer approval setting to API. !15019 (jramsay) +- Move dependency scanning comparision logic to backend. !15023 +- Update permissions for Dependency List. !15044 +- Dependency List Job Failed Alert - Hide link to job if payload from API does not include 'job_path'. !15068 +- Use vulnerability message on Dependency list. !15125 +- Rename License Management to License Compliance. !15163 +- Elasticsearch: index snippet content only up to 1 MB. !15215 +- Add note count, updated timestamp, and closed tag to epics list view. + +### Performance (9 changes) + +- Remove support for checking legacy security reports. !14291 +- Cache Geo checks for a certain time period instead of per request. !14513 +- Cache vulnerability history per project. !14619 +- Fix N+1 queries in vulnerabilities API. !14638 +- Improve Elasticsearch database import by retrying only failed cases first. !14657 +- Refactor feature flag scopes for_unleash_client. !14768 +- Split MR widget into cached and non-cached serializers. !15045 +- Geo: Don't wait when exiting the log cursor. !15070 +- Geo: Improve performance of clean up worker for selective sync. + +### Added (60 changes, 1 of them is from the community) + +- Enabled setting the Security Dashboard as a default view for groups. !7889 +- Paginate license management. !10983 +- Allows any user to comment on a dismissed vulnerability. !12067 +- Enable security gates for merge requests. !13109 +- Enable deployment boards and pod logs for instance and group clusters. !13307 +- Support for blocking merge requests. !13506 +- Add the ability to publish and install NPM packages from groups and subgroups. !13986 +- Expose saml_provider_id in the users API. !14045 +- Allow adding groups to CODEOWNERS file. !14071 +- Add group packages page. !14089 +- Add merge train helper text to merge request widget. !14097 +- Support remapping of Git repos via SSH with project aliases. !14108 +- Allow bulk editing group issues. !14141 +- Expose reject_unsigned_commits option via the API. !14165 +- Add instance level analytics. !14173 +- Show design boards at previous versions. !14292 +- Build cascading train refs for parallel execution of Pipelines for merge trains. !14296 +- Add notifications for CI Minutes quota limit approaching. !14328 +- Require session with smartcard login for Git access. !14368 +- Add analytics top navigation link. !14377 +- Add Quick Actions for adding/removing epic parent relations. !14451 +- Geo: Validate file transfers (attachments, LFS objects, artifacts). !14477 +- Create system notes for scoped labels. !14487 +- Show deploy boards for group cluster deployments. !14504 +- Support feature flag gradualRolloutUserId strategy on backend. !14515 +- Add percentage rollout support to feature flag UI. !14538 +- Added new Design Management feature for GitLab Premium. With Design Management, you can upload design assets to issues and view them all together to easily share and collaborate with your team. !14582 +- Add Ability to Enable Feature Flags by User ID. !14596 +- Add ability to view different design versions. !14601 +- Allow bulk editing group merge request milestones. !14616 +- Add cycle analytics on group level. !14627 +- Resolve Add point of interest discussions to designs. !14648 +- Limit creation of the Alert Bot in usage ping. !14649 +- Audit strategies for feature flag scopes. !14652 +- Read and write User Admin notes via API. !14662 +- Add date range dropdown for Analytics. !14681 +- Allow auditors to see the group and project security dashboards. !14695 +- Add `Incident` label to issues created by the Alert Bot. !14705 +- Merge vulnerabilities data into Dependency List report. !14706 +- Support an alert template field to allow for incident customization. !14710 +- Add a rake task to run a LDAP group sync. !14735 (Harish Ramachandran and Cindy Pallares) +- Log impersonation actions in audit log. !14740 +- Support feature flag userWithId strategy on backend. !14752 +- Add vulnerabilities to dependency list. !14761 +- Add project download & project export audit events. !14775 +- Count design usage, in order to meet SMAU OKR. !14779 +- Support multiple sites in DAST reports. !14787 +- Allow adding email domain to group to limit users to ones with email in this particular domain. !14800 +- Allow global search on comments. !14818 +- Add filtering by vulnerabilities to Dependency List. !14825 +- Support for bulk editing labels at a group level. !14827 +- Add an Upgrade button to Group's billings page. !14849 +- Add authorization to the dependency list. !14867 +- Add cycle analytics on a group level - FE. !14891 +- Add Dependency Scanning information to the Dependency List. !14955 +- Tweak Geo node form text. !14957 +- Geo: Make Object Storage synchronization in Geo Nodes configurable via Admin UI. !15000 +- Enable security report approvals by default. !15087 +- Add Collapse buttons to Operations settings. !15117 +- Geo: Support replication for Docker container registries. !15135 + +### Other (19 changes, 2 of them are from the community) + +- Update License Management section information under CI/CD settings. !4295 +- Adds a popover to vulnerability-check approvals. !14038 +- Show warning for deploy boards if legacy app label is used. !14103 +- Change spelling of wildcare to wildcard on feature flag new and edit forms. !14171 +- Rename `TOKEN_TYPES` to `USER_TOKEN_TYPES`. !14209 (Arun Kumar Mohan) +- Improved dependency proxy page with some small UI enhancements. !14448 +- Replace 'JIRA' with 'Jira' for EE-specific code comments. !14479 (Takuya Noguchi) +- Remove unused EE::GitPushService. !14483 +- Improved project level navigation for package features. !14492 +- Add Ability to Remove Projects From the Envivonment Dashboard. !14563 +- Increase rate at which UpdateAllMirrorsWorker schedules jobs and reschedules itself. !14573 +- Cleaned up package list icons to improve consistency inside package section. !14607 +- Limit width for onboarding popovers. !14641 +- Updates the security dashboard documentation link. !14669 +- Add counter columns to geo_node_statuses database table. !14943 +- Geo - Rename recheck actions to reverify. !14979 +- Remove deprecated name sast_container from licensed features. !14980 +- Remove default relative_position from epic_issues. !15008 +- Fix alignment of activity dropdown in epic tabs; add counter to discussion tab. + + +## 12.1.12 + +### Security (4 changes) + +- Hide approvers if a rule has any hidden groups. +- Fix Gitaly SearchBlobs flag RPC injection [Gitaly v1.53.4]. +- Prevent IDOR when adding groups to protected environments. +- Upgrade mermaid to prevent XSS. + + +## 12.1.10 + +- No changes. + +## 12.1.5 + +- No changes. + +## 12.1.4 + +### Fixed (3 changes) + +- Don't send CI usage email notifications when quota is unlimited. !14810 +- Fix variable mismatch in code quality widget. !14829 +- Change package validation scope to fix Maven package naming functionality. !14922 + + +## 12.1.3 + +### Fixed (3 changes) + +- Allow bulk editing group issues for reporter access level and higher. !14744 +- Initialize Application Table on Instance-wide Cluster Details. !14749 +- Hide "Buy additional minutes" button for self-managed installs. !14826 + +### Added (4 changes) + +- Add Vulnerabilities API scoping: pipeline. !14376 +- Add policy for accessing dependencies. !14561 +- Add filtering by package manager for dependencies. !14562 +- Add dependency list public endpoint. !14612 + + +## 12.1.2 + +### Security (1 change) + +- Ensure the Insights configuration project is part of the group and is accessible to the current user. + +### Security (6 changes) + +- Don't override approval rules if not allowed. +- Grant admin note permissions in epics for maintainers and owners. +- Queries for Upload should be scoped by model. +- Fix bypass email verification when SCIM user is created via API. +- Prevent an XSS vector in the add approver email. +- Make vulnerability feedback invisible if limited access to repo. + + +## 12.1.1 + +### Fixed (1 change) + +- Don't send CI usage email notifications for self-hosted instances. !14809 + + +## 12.0.7 + +### Security (3 changes) + +- Limit number of jobs in running pipelines for the past hour on per plan basis. !1182 +- Queries for Upload should be scoped by model. +- Filter out old system notes for epics in notes api endpoint response. + + +## 12.0.6 + +- No changes. + +## 12.0.2 (2019-06-25) + +### Fixed (1 change) + +- Take into account events created before milestone start. !14184 + + +## 12.0.1 (2019-06-24) + +- No changes. + +## 12.0.0 (2019-06-22) + +### Security (2 changes) + +- Filter relative links in wiki for XSS. +- Fix XSS in Ancestor tooltip title. + +### Removed (2 changes) + +- Remove old approver system in favor of new approval rule system. !12436 +- Geo: Remove deprecated wikis_count and repositories_count fields from the public API. !13025 + +### Fixed (36 changes, 1 of them is from the community) + +- Group SAML identities cleaned up when leaving a group. !5817 +- Make root relative URLs clickable in vulnerability modal. !9767 +- Make burndown chart timezone aware. !10328 +- Prevent files paths from overflowing in vulnerability info modal. !10606 +- Fixed a bug where removing related issues could get stuck. !12316 +- Fix anchor link in UI. !12737 +- Add feature flag to group_scim javascript. !13078 +- Geo - Enable Cron job to perform repository checks on a Geo secondary node. !13103 +- Restrict child_epic and remove_child_epic quick actions when using mysql. !13152 +- Disable licenses_app feature flag by default. !13291 +- Fix security dashboard errors on IE11. !13319 +- Respect limited indexing settings in rake tasks. !13437 +- Geo - Does not redirect user to the custom home page URL on a Geo secondary. !13447 +- Use quarantine size to check push size against repository size limit. !13460 +- Fix SSO Enforcement when used with 2FA. !13473 +- Fix Git over HTTP when using SAML SSO Enforcement. !13485 +- Only use elasticsearch when it is enabled. !13495 +- Add referenced-commands in no overflow list. !13550 +- Hide action buttons while security dashboard is loading. !13576 +- Fix alignment of label for admin notes on admin. !13592 (Takuya Noguchi) +- Use elasticsearch go indexer for wikis. !13743 +- Handle case where site property is an array in DAST report. !13775 +- Fix dast report parsing regression caused by change in zaproxy. !13789 +- Fix port validation in .gitlab-webide.yml. !13846 +- Fix "rule_type does not exist" error during consume_remaining_migrate_approver_to_approval_rules_in_batch_jobs migration. !13947 +- Hide operations nav icon for small screens. !13960 +- Remove free user info from non-ultimate license. !14010 +- Use fallback approval rule if no eligible rules exist. !14042 +- Fix 'Group > Usage Quota' menu item. !14043 +- Fix incorrect epic ancestor links. !14092 +- Show Usage Quotas regardless of namespace subscription. !14135 +- Fix calculation of used extra CI minutes. !14217 +- Remove class hiding spinner in board switcher. +- Fix broken filter by approvers. +- Remove extra spaces in MR list view approval counts. +- Remove extra border on tracing empty state page. + +### Changed (18 changes) + +- Allow merge requests to be merged even when it does not have up-to-date pipeline when merge request pipeline is enabled. !12309 +- Migrate code_owners to rule_type enum on approval_merge_request_rules. !13036 +- Avoid failing pull mirroring if LFS import fails. !13133 +- Updates Pipeline Quota page to accomodate for Storage Quotas. !13139 +- Align group and project level security dashboard UX. !13180 +- Remove shared_runner_minutes_on_root_namespace feature flag. !13208 +- Enable dependency proxy per group by default. !13574 +- Move dependencies API endpoint to "security" namespace. !13897 +- Allow developers to configure dependency proxy. !13899 +- Use real data in `:project/security/dependencies` endpoint. !13906 +- Use bulk-indexing API for project associations. !13917 +- Update response schema for DependencyList endpoint and add status. !13918 +- Geo - Make foreign data wrapper a hard requirement. !13940 +- Polish SAML SSO configuration page. !13982 +- Make Insights Generally Available. !14067 +- Automatically index wikis in elasticsearch. !14095 +- Require Hashed Storage to be enabled to create new Geo Nodes. !14102 +- Changes to default insights charts. + +### Performance (7 changes) + +- Omit page counts in admin audit logs. !1306 +- Improve scheduling of mirror updates to reduce frequency of database queries. !11217 +- Limit count to improve query performance. !12231 +- Avoid loading database objects for Elasticsearch results. !12691 +- Avoid hitting Elasticsearch more than once on search. !13120 +- Add index to count pending mirror updates. !13901 +- Performance improvement when loading epics list. !13904 + +### Added (34 changes, 1 of them is from the community) + +- Provide application-wide LDAP membership lock setting. !4354 +- Added a "Require user password to approve" option on projects for merge request approvals to enable compliance in FDA regulated fields". !10364 (James Davila, Paul Knopf, Greg Smethells) +- Add "Allow merge trains" option to project settings page. !10803 +- Add optional reason when dismissing vulnerabilities. !11226 +- System notes for adding and removing epic relationships. !11416 +- Show if user is using a license seat on admin user page. !11449 +- Allow merge requests to block other MRs from being merged. !11600 +- SSO enforement redirects to group sign in when not using SAML. !12246 +- When a merge request is blocked by other unmerged merge requests, display them on the show page of a merge request. !12357 +- Group SAML can be used to sign into a GitLab instance. !12660 +- IP address restriction for groups. !12669 +- Make the number of Elasticsearch shards and replicas configurable. !12713 +- Add quick actions for adding and removing child epic relations to epic. !12772 +- Adds a confidence filter to the Group Security Dashboard. !12805 +- Expose Design blobs through GraphQL. !13037 +- Expand pipeline variables passed downstream. !13197 +- Add support for querying epics with GraphQL. !13248 +- Add Merge Train auto merge strategy. !13278 +- Adds Storage Counter. !13294 +- Allow design blobs to be stored in Git LFS. !13389 +- JIT users provisioning for group SAML. !13552 +- Add Ability for Maintainers to Rotate Instance Id in Feature Flags. !13722 +- Notify users when their CI minutes quota has run out. !13735 +- Use Flipper as an A/B testing framework. !13755 +- [New Auto Merge Strategy] Add To Merge Train When Pipeline Succeeds. !13767 +- Add `dependency_list` report. !13900 +- Add admin form to enforce a pipeline on an instance. !13923 +- Count usage of DependencyList endpoint. !13962 +- Add preliminary Dependency List frontend implementation. !13968 +- Add Admin settings to disable project deletion. !14002 +- Usage ping: Track amount of incident issues. !14013 +- Sync file changes from Web IDE to Web Terminal. !14035 +- Add report_approver to approval_merge_request_rules. !14050 +- Add merge train position message under pipeline in merge request widget. !14064 + +### Other (9 changes, 2 of them are from the community) + +- New user flow for SSOing into a GitLab.com group. !10338 +- Improve vulnerability API. !12760 (Robert Schilling) +- Add action popover component for user onboarding. !13346 +- Add help content popover component for user onboarding. !13363 +- Expose services in the web ide terminal entity. !13665 +- Rename boards spec name. !13725 (George Tsiolis) +- Fix typos in i18n strings for onboarding tour. !14153 +- Externalize strings of chat page in user profile. !28632 +- Remove commit count from storage quotass. + + +## 11.11.8 + +- No changes. + +## 11.11.7 + +### Security (5 changes) + +- Don't override approval rules if not allowed. +- Grant admin note permissions in epics for maintainers and owners. +- Prevent an XSS vector in the add approver email. +- Ensure the Insights configuration project is part of the group and is accessible to the current user. +- Make vulnerability feedback invisible if limited access to repo. + + +## 11.11.4 (2019-06-26) + +### Fixed (1 change) + +- Use quarantine size to check push size against repository size limit. !14269 + + +## 11.11.3 (2019-06-10) + +### Fixed (1 change) + +- Fix create mr from vuln modal regression. !13524 + + +## 11.11.2 (2019-06-04) + +### Performance (1 change) + +- Geo - Does not apply selective sync restrictions while counting registries on the tracking database. !13257 + + +## 11.11.0 (2019-05-22) + +### Security (1 change) + +- Destroy project remote pull mirrors instead of disabling. !10355 + +### Fixed (26 changes) + +- Add missing endpoint for user information to GitHub API. !10482 +- Remove slack slash commands double up. !10555 +- Display Scoped Labels on Issue Board. !10669 +- Ensure custom group template feature is available only for groups on gold and silver. !10678 +- Fix removing and updating insights config, and foreign key constraints. !11030 +- Geo: Fix broken button to delete orphaned upload registries through Admin. !11156 +- Resolve: Epic labels in system notes point to the epic itself. !11234 +- Geo: Fix: Project sync failures usually double-increment *_retry_count. !11381 +- Fix unauthenticated GET of public Epics API. !11485 +- Hide ScopedBadge overflow notes. !11548 +- Fixes a CI failure in jest. !11586 +- Fix error when reordering/deleting subgroup epics. !11837 +- Fix some filter bar tokens not showing up when multiple assignees are enabled. !11939 +- Geo: Fix OAuth authentication with relative URLs. !11976 +- Fix for not being able to remove the last namespace/project from elasticsearch limited namespaces/projects. !11989 +- Fix approvals project settings section when merge requests disabled. !12070 +- Enable alert bot to use quick actions. !12127 +- Geo: Remove counts over geo_event_log table. !12146 +- Geo: Prevent RegistryFinder calls on the primary. !12183 +- Fix placement of LDAP icon in members list. !12304 +- Use path instead of a URL for accessing approval settings. !12414 +- Remove non-semantic use of `.row` in member listing controls. !12466 +- Force tag overwrite on mirror update. !12491 +- Fixes the feedback paths on the project security dashboard. !12849 +- Fixed starting a review on images. +- Fix updating board attributes through API. + +### Changed (13 changes) + +- Group SAML enforcement requires active SSO session for group access. !10034 +- Geo: Rename "Disable" to "Pause|Resume" (Admin > Geo Nodes). !10297 +- Upgrade group security dashboard to use gitlab-ui line chart. !10479 +- Geo - Implement selective sync support for the LFS objects FDW queries. !10757 +- Documentation : Improve selective sync documentation. !11072 +- Geo: Implement selective sync support for the FDW queries to count the number of attachments to sync. !11107 +- Allowing Elasticsearch indexing gap recovering. !11408 +- Geo - Implement selective sync support for the FDW queries to count attachments. !11518 +- Geo - Implement selective sync support for the FDW queries to find attachments. !11544 +- Geo - Add selective sync support for the job artifacts FDW queries. !11892 +- Fetch all available groups when creating MR approval rule. !12096 +- SSO enforcement requires active SAML session for web access to project resources. !12109 +- Perform LDAP group sync on sign in only for new users. + +### Performance (3 changes) + +- Swap conditions to reduce frequency of database query. !11217 +- Add index for mirror_user_id to projects table. !11422 +- Geo - Improve performance of the selective sync cleanup worker. !11998 + +### Added (27 changes, 2 of them are from the community) + +- Proxy websocket requests to build services. !9723 +- Add dependency proxy for containers. !9750 +- Added gitlab:elastic:projects_not_indexed rake task. !9854 (Jason Colyer) +- Added Snowplow tracking to notes. !10104 +- Support multiple assignees for merge requests. !10161 +- Add UI to enable/disable a dependency proxy on a group level. !10386 +- Let the GitLab Alert bot open incident issues. !10460 +- Remove feature flag `:incident_management`. !10569 +- Allow multiple secondary nodes behind a load balancer. !10755 +- Copy LFS objects from pull mirror. !10779 +- Geo: Inform users about current replication lag in the UI on secondaries. !10807 +- Autosave description in epics. !10844 +- Keep track of packages_file in ProjectStatistics. !11020 +- Adds a dismissal item to the vulnerability modal. !11028 +- Add project level config for merge train. !11065 +- Support pie charts in Insights. !11186 +- Create ActiveRecordModel and table for Merge Train feature. !11204 +- Allow adding GitLab license at installation time. !11244 +- Added ZAP Full Scan support for DAST. !11269 +- Add created_at and updated_at filters to Epics API. !11315 (jramsay) +- Add API to retrieve security vulnerabilities. !11539 +- Basic Rails implementation for BOM. !11613 +- Add Frontend Store and UI For Environments Dashboard MVC. !11702 +- Track clicks on uninstall button for kubernetes implementation. !12048 +- Add Vulnerabilities API scoping: severity, confidence, and dismissal. !12076 +- Alert users that protected environments affects feature flags. !12168 +- Support creating a new child epic from the API. + +### Other (8 changes, 1 of them is from the community) + +- Improve project settings page layout and UX. !10388 +- Uses the more explicit vulnerability feedback endpoints on the front end. !10461 +- Automatically enable multiple MR assignees feature flag. !10558 +- Move geo_log_cursor binary to the ee folder. !10821 +- Move sidekiq-cluster to ee/bin. !11001 +- Move ee-specific code from boards/components/issue_card_inner.vue. !11032 (Roman Rodionov) +- Make all billing cards fit in view. !11602 +- Extracted EE specific lines for spec/javascripts/vue_mr_widget/mock_data.js. !11847 + + +## 11.10.8 (2019-06-27) + +- No changes. +### Security (2 changes) + +- Gate MR head_pipeline behind read_pipeline ability. +- Do not allow localhost urls in GitHub Integration. + + +## 11.10.7 (2019-06-26) + +### Fixed (1 change) + +- Use quarantine size to check push size against repository size limit. !14271 + + +## 11.10.6 (2019-06-04) + +### Fixed (5 changes, 1 of them is from the community) + +- Fix removing and updating insights config, and foreign key constraints. !11030 +- Fix the group's epic page. The Paste issue link placeholder shown as 'undefinedundefinedundefined' in Chinese environment. And the error message showed nothing. !11312 (wdmcheng) +- Fix approvals project settings section when merge requests disabled. !12070 +- Use path instead of a URL for accessing approval settings. !12414 +- Fix relative url root issues with license management. !12488 + + +## 11.10.4 (2019-05-01) + +### Fixed (1 change, 1 of them is from the community) + +- Fix error retrieving licenses when relative URL in use. !11717 (Hiroyuki Sato) + +### Changed (1 change) + +- [Insights] Change the default weeks period limit to 12. !11498 + + +## 11.10.3 (2019-04-30) + +- No changes. + +## 11.10.2 (2019-04-25) + +### Security (1 change) + +- Handle race condition when creating an MR approval. + + +## 11.10.1 (2019-04-23) + +### Fixed (4 changes) + +- Fix approval rules when used with relative url root. !10819 +- Fix add/remove pipeline dashboard issue. !11029 +- Fix JWT token check when repository does not exist. !11033 +- Fix preventing approval of merge requests by an author. !11263 + +### Changed (2 changes) + +- Improve SAML settings with validation, design, and help text. !10450 +- Use a single color for the Insights time series bar charts. !11076 + + +## 11.10.0 (2019-04-22) + +### Security (3 changes) + +- Check label_ids parent when updating issue board. +- Geo - Improve security while redirecting user back to the secondary after a logout & re-login via the primary. +- Expose only basic group attributes in boards API. + +### Fixed (25 changes) + +- User Statistics in Admin Dashboard now a button. !8807 +- Fix misalignment of dropdowns in edit board modal of issue boards. !9909 +- Geo: Support archive recovery or streaming replication types in health check. !9935 +- Geo: Only display Geo-specific clone instructions button on a Geo Secondary node. !10007 +- Resolve Deletion of vulnerability-associated issuables prevents security report from loading. !10016 +- Elasticsearch API: Fix project_id showing as 0 for all blobs. A reindex will be required. !10020 +- Make editing the filters in the Group Security Dashboard easier. !10138 +- Geo - Reset the verification checksum after deployment refs are created. !10160 +- Search snippets via elasticsearch. !10325 +- Fixed bug preventing users from adding child epics with multiple children. !10331 +- Fix merge requests being added to Jira Development Panel. !10342 +- Fix authors of merge commits being excluded from approving an MR. !10359 +- Fix ChatOps Slack responder for gitlab.com. !10416 +- Fix sorting by priority with filtering by approvers. !10446 +- Make UpdateRepositoryStorageService idempotent. !10457 +- Fix broken links to protected environments on the CI/CD settings page. !10470 +- Notify owner that group is invalid when LDAP "Sync now" fails. !10509 +- Fix user agent string for Hosted Jira. !10545 +- Fix query used to calculate number of users over license. !10556 +- Fix pipeline bridge serialization error. !10565 +- Correct path to cluster health partial. !10638 +- Ensure Insights charts show all periods even if there are no data. !10733 +- Hide scoped labels help text without corresponding license. !10737 +- Fix merge request operation failure (e.g. assigning user) when project approvers required increases. !10766 +- Include subgroups when finding Insights issuables. !10801 + +### Changed (27 changes) + +- Move project search bar into modal dialog on Operations Dashboard page. !9260 +- Geo - Add selective sync support for the FDW queries to count synced registries. !9445 +- Geo - Add selective sync support for the FDW queries to count failed registries. !9527 +- Convert enable group authentication checkbox to toggle button. !9816 +- Geo: Limit max backoff time by 1 hour, instead of 7 days. !9893 +- Documented Guide to using Geo in HA with RDS cross-region replicas. !9985 +- Dynamically resize security group dashboard vuln graph. !10028 +- Add self approval of merge requests setting to merge requests approvals API. !10050 +- elasticsearch: Switch from LZ4 to DEFLATE compression. !10072 +- Geo - Store the invalid checksum when we have a mismatch. !10101 +- Add requested resources to cluster health metrics. !10135 +- Allow self-approvals in fallback approval rules. !10218 +- Geo - Add selective sync support for FDW queries to find verified registries. !10255 +- Add file line number to vuln modal. !10265 +- Geo - Add selective sync support for FDW queries to find registries where verification has failed. !10266 +- Enforce Geo JWT tokens scope for repository sync. !10303 +- Display link to review note in text email, similar to HTML email. !10401 +- Geo - Add selective sync support for the FDW queries to find mismatch registries. !10434 +- Geo - Add selective sync support for queries to find registries retrying verification. !10436 +- Geo - Add selective sync support for the FDW queries to find registries to verify. !10438 +- Improve DAST location fingerprints. !10487 +- Change order in dast location fingerprint. !10487 +- Geo: Add selective sync support for the FDW queries to find unsynced projects. !10522 +- Enrich container scanning with more data on the frontend. !10526 +- [Geo] Don't mark sync as successful if repo does not exist because of some problems. !10578 +- Move operations dashboard from Ultimate to Premium. !10586 +- Support multiple chart per page for Insights. + +### Performance (3 changes) + +- Avoid a Gitaly N+1 when loading commits for Elasticsearch search results. !9760 +- Geo: Optimize repository and wiki verification counts. !9939 +- Avoid N+1 when loading Code search results with Elasticsearch enabled. !10394 + +### Added (31 changes, 1 of them is from the community) + +- Add approval and unapproval webhooks. !8742 +- Adding pipelines to the operations dashboard. !9197 +- Add operations dashboard usage counts to usage data. !9291 +- Automatically deprovision and update users from a configured identity via SCIM. !9388 +- Add SCIM Token section to SAML SSO Settings. !9619 +- Use merge request MERGE ref for attached merge request pipelines. !9622 +- Geo: Support syncing over non-publicly accessible URLs. !9634 +- Prevent merge if the merge request pipeline is stale. !9643 +- Block possibility to change email for users with group managed account. !9712 +- Geo admin panel for upload verification. !9720 +- Geo: Create separate models for different registries. !9755 +- Add ability to purchase extra CI minutes. !9815 +- Update Web IDE config to accept ports. !9818 +- Allow per-project and per-group enabling of Elasticsearch indexing. !9861 +- Geo: Help admins diagnose configuration problems. !9988 +- Added MAVEN_CLI_OPTS env var support to License Management CI job. !10012 +- Show DAST vulnerabilities in the Group Security Dashboard. !10271 +- Show DAST in Group Security Dashboard Back-End. !10277 +- Removing pipeline dashboard feature flag. !10302 +- Update user name upon LDAP sync. !10316 (@icode1) +- Collect usage of pod logs feature. !10370 +- Added metrics reports widget to merge request page. !10380 +- IP whitelisting for Geo-enabling functionality in the primary. !10383 +- Persist in the URL the page and day range of vulnerabilities viewed in the Group Security Dashboard. !10402 +- Add 'Metrics' job artifact report type. !10452 +- Create a user via SCIM. !10456 +- Geo: Display secondary replication lag on console (if lag > 0 seconds). !10471 +- Add Roadmap to Epic page. !10488 +- Expose merge request pipeline parameters for MR widget. !10502 +- Allow instance admins to link all projects to Jira DVCS. !10541 +- Added mutually exclusive key value labels. + +### Other (4 changes) + +- Simplify admin instance licenses page. !9785 +- Extract EE specific files and externalize strings in admin application settings. !9930 +- Add specs for coerced labels parameter in Epics API. !9932 +- Improve project service desk settings. !10381 + + +## 11.9.12 (2019-05-30) + +### Security (3 changes, 1 of them is from the community) + +- Filter relative links in wiki for XSS. (kerrizor) +- Fix XSS in Ancestor tooltip title. +- Ignore out of range epic IDs. + + +## 11.9.10 (2019-04-26) + +### Security (1 change) + +- Handle race condition when creating an MR approval. + +### Fixed (1 change, 1 of them is from the community) + +- Fix the group's epic page. The Paste issue link placeholder shown as 'undefinedundefinedundefined' in Chinese environment. And the error message showed nothing. !11312 (wdmcheng) + + +## 11.9.9 (2019-04-23) + +### Fixed (1 change) + +- Fix approval rules when used with relative url root. !10819 + + +## 11.9.8 (2019-04-11) + +### Fixed (1 change) + +- Fix sorting by priority with filtering by approvers. !10446 + + +## 11.9.7 (2019-04-09) + +### Security (1 change) + +- Expose only basic group attributes in boards API. + + +## 11.9.6 (2019-04-04) + +### Fixed (3 changes) + +- Fix project approval rule with only private group being considered as approved when override is allowed. !10356 +- Fix approval rule sourcing from forked MR. !10474 +- Guard against ldap_sync_last_sync_at being nil. !10505 + +### Added (1 change) + +- Add Insights frontend to retrieve and render chart. !9856 + + +## 11.9.5 (2019-04-03) + +### Fixed (3 changes) + +- Fix project approval rule with only private group being considered as approved when override is allowed. !10356 +- Fix approval rule sourcing from forked MR. !10474 +- Guard against ldap_sync_last_sync_at being nil. !10505 + +### Added (1 change) + +- Add Insights frontend to retrieve and render chart. !9856 + + +## 11.9.3 (2019-03-27) + +### Security (1 change) + +- Check label_ids parent when updating issue board. + + +## 11.9.2 (2019-03-26) + +### Security (2 changes) + +- Geo - Improve security while redirecting user back to the secondary after a logout & re-login via the primary. +- Check label_ids parent when updating issue board. + + +## 11.9.1 (2019-03-25) + +### Fixed (1 change) + +- Fix date save for Epic to reflect on UI immediately after save. !10321 + + +## 11.9.0 (2019-03-22) + +### Security (4 changes) + +- Prevent Group SAML authorizing sign in without prior user approval. +- Respect group membership lock when importing a member from another group. +- Remove the possibility to share a project with a group that a user is not a member of. +- Prevent SAML access when disabled by group admin on GitLab.com. + +### Fixed (22 changes) + +- Allow assigning Prometheus alerts to multiple environments. !7361 +- Fix repo pushes while initial Elasticsearch indexing not permitting initial indexing to complete. !9478 +- Fix vulnerability occurrence scope to trailing 30 days. !9494 +- Skip whitelisted vulnerabilities in Container Scanning reports. !9528 +- Fix npm registry for yarn. !9599 +- Renders inline downstream & upstream pipelines. !9627 +- Prunes whole Geo event when there's only a primary. !9630 +- Fix alert notifications for non-public projects. !9636 +- Fix 500 error when visiting merged merge request. !9648 +- Allow plus symbol in maven package version. !9657 +- Show commands applied message when promoting issues to epics. !9669 +- Ensure comments from merge request review is displayed in the same order as user commenting order. !9684 +- Geo - Fix selective sync by namespace. !9732 +- Fix bridge jobs than can be hidden keys too. !9796 +- Fix approval-related UI showing up in free plan. !9819 +- Add 'No approvals required' view to approval rules (behind feature flag). !9899 +- Fix npm package install with a dot in the name. !9900 +- GroupSAML for GitLab.com prevents blank NameID. !9907 +- Fix protected environment initializer. !10150 +- Fix SSH pull mirrors not working. !10272 +- Fix HTML spew in Locked Files page. +- Fixes Broken new/edit feature flag form. + +### Changed (9 changes, 1 of them is from the community) + +- Remove authorization from /managed_licenses. !8541 +- Consider dismissed items in security reports summary. !9275 +- Add backend for cross-project pipeline dashboard MVC. !9396 +- Create merge request approval rule for each code owner entry. !9455 +- Split severity and confidence values for vulnerabilities. !9495 +- Enforce Geo JWT tokens scope for file uploads and Geo API. !9502 +- Update cluster health empty state. !9540 (George Tsiolis) +- Add extra graph spacing on the Security Dashboard Group Vulnerability Chart. !9780 +- Add Kerberos URL back to clone panel. !9840 + +### Performance (1 change) + +- Eliminate N+1 queries in Epics API. !9897 + +### Added (23 changes, 1 of them is from the community) + +- Enabled setting the Security Dashboard as a default view for groups. !7889 +- Add reordering of child epics. !9283 +- Create MR from Vulnerability Solution. !9326 +- Create pool repositories on Geo secondaries. !9428 +- Add date range for security dashboard graph. !9446 +- Add filtering merge requests by approvers. !9468 +- Add audit log for managing feature flags. !9487 +- Add DELETE package API endpoint. !9623 +- Enrich container scanning report. !9641 +- Adapt feedback for Container Scanning vulnerabilities. !9655 +- Enforce merge request approvals from code owners. !9656 +- Added vendored CI/CD template for Dependency Scanning job. !9660 +- Add Insights config behind the "group_insights" feature flag. !9665 +- Add single package API endpoint. !9667 +- Added GET /licenses and DELETE /license/:id endpoints. !9733 +- Add container scanning results to group security dashboard. !9736 +- Add an incident management settings form and create issues from alertmanager alerts. !9773 +- Add API for reordering child epics. !9781 +- Allow guests to comment on epics. !9783 +- Display Recent Boards in Board switcher. !9808 +- Add Ancestors in Epic Sidebar. !9817 +- Add vendored templates for SAST, DAST, Container Scanning and License Management job definitions. !9921 +- Add realtime validation for user fullname and username on validation. !25017 (Ehsan Abdulqader @EhsanZ) + +### Other (12 changes, 1 of them is from the community) + +- Use export-import svg from gitlab-svgs. !9453 +- Renames 'revert dismissal' to 'undo dismiss' on the Group security dashboard. !9500 +- Using positional arguments in request specs have been deprecated. !9506 (Jasper Maes) +- Splits the severity and confidence constants in the group security dashboard frontend. !9535 +- Add Gitlab.com gold trial callout to /billings. !9611 +- Update project settings section titles and info. !9614 +- Improve visual consistency of values in vulnerability modal. !9616 +- Limit Group Security Dashboard to selected types of report. !9626 +- Make related issues components reusable. !9730 +- sidekiq-cluster: put each sidekiq in a new pgroup. !9775 +- License Management: Load up to a 100 licenses per default. !9913 +- Adds documentation for autoremediation. !10054 + + +## 11.8.10 (2019-04-30) + +- No changes. + +## 11.8.3 (2019-03-19) + +- No changes. + +## 11.8.2 (2019-03-13) + +### Fixed (4 changes) + +- Fix 500 error when visiting merged merge request. !9648 +- Fix bridge jobs than can be hidden keys too. !9796 +- Fix approval-related UI showing up in free plan. !9819 +- Add 'No approvals required' view to approval rules (behind feature flag). !9899 + + +## 11.8.0 (2019-02-22) + +### Security (2 changes) + +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !790 +- Hide personal access tokens from other maintainers. + +### Fixed (28 changes, 1 of them is from the community) + +- Add keyboard navigation to issue board switcher and remove duplicate scroll bar. !8591 +- Geo: Always update the default branch on the secondary. !9064 +- Fix public group milestones not shown in epics autocomplete. !9068 +- Check hosts file for nameserver IP. !9071 +- Fixes the icon for fixed vulnerability in Container Scanning report. !9120 +- Return 400 error instead of 500 when upload maven package with invalid version. !9125 +- Fix mirrors that have invalid SSH public auth mode set. !9135 +- Hide packages without version from UI. !9151 +- Remove duplicate "Operations Dashboard" header/breadcrumb. !9152 (Nathan Friend) +- Create UTC date in subscription table. !9166 +- Display epic icon in related epics list. !9166 +- Don't validate Jenkins username if password is blank. !9198 +- Don't show Alert widget for non-licensed users. !9224 +- Group security dashboard: Fix overflow for Vulnerabilities with long titles. !9271 +- Geo - Respect shard restriction while loading new resources to verify on the Geo secondary node. !9343 +- When cleaning up repositories, ensure orphaned entries do not remain in the tracking database. !9344 +- Geo - Make sure project does not meet selective sync rule before deleting it. !9345 +- Fix alert notification emails are not being sent. !9393 +- Fix alert notifications for managed Prometheus. !9402 +- Replacing old blob methods in ElasticSerach module. !9418 +- Add checks to prevent cycling hierarchy in epics structure. !9438 +- Fix bug where users could not be added in protected branch rules. !9474 +- Avoid SAML required_groups indiscriminately unblocking users on login. !9489 +- Resolve Cannot scroll forwards in time for roadmap view. !9530 +- Fix unleash server side cannot return feature flags. !9532 +- Show alerts settings only for manual configuration. !9538 +- Fix access to constant Gitlab::RepositorySizeError. !9579 +- Clear our import data credentials when adding new mirrors. !24339 + +### Deprecated (1 change) + +- Geo: Show hashed storage warnings on geo nodes page. !8433 + +### Changed (14 changes) + +- Prevent commit authors from self approvaling merge requests. !9007 +- Add docs link to explain legacy and new email format. !9020 +- Recursively expands upstream and downstream pipelines. !9073 +- Geo: Don't show external link icon on current node. !9130 +- Issues created from vulnerabilities are now confidential by default. !9157 +- Validate custom metrics. !9178 +- Change paginate number to 20. !9213 +- Convert buttons to button group on Group Security Dashboard. !9220 +- Make it possible to edit Geo primary through API. !9328 +- Geo: Handle repository and wiki sync separately in Geo::ProjectSyncWorker. !9360 +- Geo: Add settings page empty state. !9415 +- Renders New and Edit forms for feature flag in Vue and allow to define scopes. +- Improves title in feature flags empty states. +- Adds environment column to the feature flags page. + +### Performance (5 changes) + +- Solve a N+1 issue in Groups::AnalyticsController. !4508 +- Refactored Epic app in Vuex for better performance and maintenance. !9361 +- Optimize slow pipelines.js response. !9387 +- Disable commit checks when no push rules are active. !9569 +- Enable some frozen string in ee/lib. + +### Added (22 changes, 1 of them is from the community) + +- Elasticsearch: Support for Gitaly. !7434 +- Canary deployment callout on the environments page. !8457 +- Allow to filter notes in epics. !8978 +- Multiple blocking merge request approval rules (behind feature flag). !9001 +- Add support for auto-expanding Roadmap timeline on horizontal scroll. !9018 +- Added Snowplow tracking to issues import. !9067 +- Persist Group Level Security Dashboard state in URL. !9108 +- Multiple environments support for feature flags (Unleash API standpoint). !9110 +- Shows the approval given/required counts and its status for each MR when viewing the Merge Requests page. !9142 (Glavin Wiechert, Andy Steele) +- Support CURD operation for feature flag scopes. !9182 +- Add epic links API endpoints. !9188 +- Store DAST scan results in the database. !9192 +- Add LDAP integration to smartcard authentication. !9235 +- Allow SSO enforcement in group settings for GitLab.com. !9240 +- Add API endpoint for project packages. !9259 +- Add upvote/downvote information to epics API. !9264 +- Resolve Implement access controls when SSO enforcement enabled. !9270 +- Add package files API endpoint. !9305 +- Support alerts from external Prometheus servers. !9334 +- Cross-project pipelines support in .gitlab-ci.yml. !9374 +- Enable mails for external alerts. !9457 +- Moving repository across shards leaves the pool. + +### Other (13 changes, 7 of them are from the community) + +- Gather JIRA DVCS integration usage data. !8949 +- ActiveRecord::Migration -> ActiveRecord::Migration[5.0] for AddAlertManagerTokenToClustersApplicationPrometheus and EnqueuePrometheusUpdates. !9049 (Jasper Maes) +- Track navbar links in Snowplow. !9059 +- Adds snowplough tracking for the group security dashboard filters. !9119 +- Support Ajax endpoints for FeatureFlagsController. !9127 +- Fix deprecation: Passing an argument to force an association to reload is now deprecated. !9140 (Jasper Maes) +- Fix deprecation: #original_exception is deprecated. Use #cause instead. !9141 (Jasper Maes) +- Uses GLDropdown for licence management. !9237 +- Replace deprecated render text. !9346 (Jasper Maes) +- Fix several ActionController::Parameters deprecations. !9347 (Jasper Maes) +- Fix deprecation: uniq is deprecated and will be removed from Rails 5.1. !9348 (Jasper Maes) +- Turn on rubocop for frozen string in ee/. (gfyoung) +- Creates an EE component for the pipeline graph. + + +## 11.7.12 (2019-04-23) + +- No changes. + +## 11.7.11 (2019-04-09) + +### Security (1 change) + +- Expose only basic group attributes in boards API. + + +## 11.7.10 (2019-03-28) + +### Security (1 change) + +- Check label_ids parent when updating issue board. + + +## 11.7.8 (2019-03-26) + +### Security (2 changes) + +- Geo - Improve security while redirecting user back to the secondary after a logout & re-login via the primary. +- Check label_ids parent when updating issue board. + + +## 11.7.7 (2019-03-19) + +- No changes. + +## 11.7.5 (2019-02-05) + +### Fixed (2 changes) + +- Fix Kerberos authentication. !9390 +- Fix background migration error when project repository is missing. !9392 + + +## 11.7.2 (2019-01-29) + +### Security (6 changes) + +- Avoid leaking unauthorized approver group members. !766 +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !791 +- Check access rights when creating/updating ProtectedRefs. +- Fix locked file visibility issue for private repositories. +- Filter out non-project member approvers. +- Remove HTTP POST in JIRA OAuth access_token endpoint. + + +## 11.7.1 (2019-01-28) + +### Security (6 changes) + +- Avoid leaking unauthorized approver group members. !766 +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !791 +- Check access rights when creating/updating ProtectedRefs. +- Fix locked file visibility issue for private repositories. +- Filter out non-project member approvers. +- Remove HTTP POST in JIRA OAuth access_token endpoint. + + +## 11.7.0 (2019-01-22) + +### Security (1 change) + +- Add a shared secret to prevent abuse of the alert endpoint. + +### Fixed (27 changes, 2 of them are from the community) + +- Defaults to feature flags link for Operations entry. !8622 +- Fix error on explore page when logged out due to gold trial callout. !8674 +- Prevents the empty state from showing when the dashboard errors. !8703 +- Allow matching only the repo-root for CODEOWNERS. !8708 +- Fix adding labels to epics using quick actions. !8772 +- Geo: Keep the minimum cursor last event. !8832 +- Reinstate sorting issuable by weight. !8834 +- Geo - Show the proper label for the last repository check run on Geo projects page. !8844 +- Resolve Reorder gitlab:elastic:index rake tasks to ensure wikis and database are completed even if projects error out. !8852 +- Remove dash on issue weight for unauthorized users. !8882 (George Tsiolis) +- Dismiss epic promotion and persist it across reloads. !8885 +- Fix JIRA Development Panel links with subgroups. !8908 +- Remove epic field in sidebar for projects without groups. !8919 +- Remove duplicate padding from issue board switcher. !8928 +- Resolve Ctrl+Enter immediately adds MR comment. !8932 +- Geo: Ignore invalid attributes when updating Geo node status. !8957 +- Fix border-radius for related issues. !8958 (Johann Hubert Sonntagbauer) +- Fix Security Dashboard Header font size. !9011 +- Fix title and description for issue created from a vulnerability. !9022 +- Pseudonymizer: Gracefully handle empty pseudo entries. !9044 +- Fix permission check when creating an issue from a vulnerability. !9055 +- Docfix - broken doc links for Secure/Autodevops features. !9058 +- Fix Error 500 when deleting a pipeline via the API. !9104 +- Uses project_id instead of project on the group security dashboard. !9109 +- Recursively get all of a groups projects. !9205 +- Fix data migration failure if approvals_before_merge is set to too high. !9217 +- Don't remove milestones when moving issues to board backlog from non-milestone list. + +### Changed (5 changes, 1 of them is from the community) + +- Update Geo nodes empty state. !8576 (George Tsiolis) +- Add search field to issue board switcher. !8862 +- Allow downloading package files from UI. !8888 +- Changes to the data model for counts on the Group Security Dashboard. !9035 +- Fix packages UI mentioned only Maven packages support. !9132 + +### Performance (2 changes, 1 of them is from the community) + +- Fix timeout loading Open list when board contains assignee lists. +- Enable some frozen string in ee/lib. (gfyoung) + +### Added (17 changes) + +- Add an instance-level endpoint for downloading maven packages. !8274 +- Add NPM registry support to GitLab packages. !8673 +- Store container scanning CI jobs results into the database. !8797 +- Add a group-level endpoint for downloading maven packages. !8798 +- Add Filtering vulnerabilities in the Group Security Dashboard. !8817 +- Allow to filter Feature Flags. !8821 +- Geo - Show last verification time on Geo projects page. !8845 +- Adds basic filtering to the Group Security Dashboard frontend. !8886 +- Autocomplete issues and MRs in epics. !8936 +- Adds project filtering to the GSD. !8944 +- Allow using TCP for DB load balancing DNS lookups. !8961 +- Add filtering for summary and history on security dashboard. !8972 +- Add solution card to the vulnerability modal. !9030 +- Allows the Group Security Dashboard to select multiple filters. !9031 +- Added Snowplow tracking to issues export. !9045 +- Add support for relationship between epics. !9051 +- Added pagination to epics API endpoint. + +### Other (13 changes, 3 of them are from the community) + +- Promote starting a GitLab.com Gold trial on the dashboard. !6947 +- Adds event tracking to navbar. !7787 +- Update tracing settings to match error tracking settings. !8786 +- Adapt subscriptions page for free plans and trials. !8838 +- Support for new SAST and dependency scanning report format. !8869 +- Remove deprecated ActionDispatch::ParamsParser. !8897 (Jasper Maes) +- Fix deprecation: Comparing equality between ActionController::Parameters and a Hash is deprecated. !8914 (Jasper Maes) +- Removes Notes from GitLab Pseudonymizer config. !8923 +- Add count of projects with tracing enabled to usage ping data. !8940 +- Adds dependency scanning to the report type filters on GSD. !9034 +- Fix deprecation: Using positional arguments in specs for EE spes in spec/. !9040 (Jasper Maes) +- Pass issuable-type in AddIssuableForm. !9111 +- Gather deepest epic relationship data. + + +## 11.6.11 (2019-04-23) + +- No changes. + +## 11.6.10 (2019-02-28) + +### Security (5 changes) + +- Remove the possibility to share a project with a group that a user is not a member of. +- Prevent Group SAML authorizing sign in without prior user approval. +- Prevent SAML access when disabled by group admin on GitLab.com. +- Respect group membership lock when importing a member from another group. +- Ignore out of range epic IDs. + + +## 11.6.9 (2019-02-04) + +- No changes. + +## 11.6.8 (2019-01-30) + +- No changes. + +## 11.6.5 (2019-01-17) + +### Fixed (1 change) + +- Fix Error 500 when deleting a pipeline via the API. !9104 + + +## 11.6.4 (2019-01-15) + +- No changes. + +## 11.6.3 (2019-01-04) + +### Fixed (1 change) + +- Fix instance project templates no longer working. !9019 + + +## 11.6.2 (2019-01-02) + +### Fixed (1 change) + +- Fix issue ID wrapping and avatar counter shrinking in Related Issues list. !8854 + + +## 11.6.1 (2018-12-28) + +### Security (1 change) + +- Add a shared secret to prevent abuse of the alert endpoint. + + +## 11.6.0 (2018-12-22) + +### Security (7 changes) + +- Switch from CBC to GCM for Geo logout tokens. !8518 +- Prevent reporter roles from viewing the Jaeger tracing settings page. +- Sanitize tracing external_urls before saving to DB and when displaying the URL to prevent XSS issues. +- Fix IDOR at /drafts/publish. +- Authorize users when listing board users and milestones. +- Resolve: Guest can set weight of a new issue. +- Fixes XSS with merge request approvers selection. + +### Fixed (27 changes, 2 of them are from the community) + +- Ensure that avatars in approvals have correct tooltip. !6269 +- Geo: Fix push to secondary over SSH for LFS. !8044 +- Don't show packages tab and settings for starter license. !8270 +- Makes the vulnerability name on the Group Security Dashboard a button for better A11y. !8341 +- Used the iid instead of the id for linked issues on the Group Security Dashboard. !8357 +- Show navigation line separator when instance etrics is disabled. !8379 (George Tsiolis) +- Fix project deploy key creation and deletion as admin. !8432 +- Changes initial state for disabled prometheus integrations. !8434 +- Fix a typo in Admin: intergration -> integration. !8444 (Vincent AUBERT) +- Geo: Moving registry deletion into the job that deletes the files and project record. !8480 +- Parameterize alerting rules with variables. !8481 +- Fix PostReceive failing for project mirrors missing local branch. !8495 +- Rails 5: Fix the check whether the database is in read-only mode. !8594 +- Raisl 5: Fix Gitlab::Database::LoadBalancing#caught_up? check. !8595 +- Renders upstream and downstream pipelines in the main pipeline graph. !8607 +- Fix issue board api with special milestones. !8653 +- fix pod dropdown not switching pod logs. !8660 +- Geo - Respect the next retry time when re-verifying failed repositories. !8661 +- Update elasticsearch system check to check for new supported versions. !8683 +- Handle null start or due dates for dates sourcing milestone in Epics. !8689 +- Fixed license managment path in MR widget for fork cases. !8700 +- Fix gitlab:geo:check rake task. !8714 +- Fix ability to choose shards for selective sync. !8717 +- Add Rails.version to the Geo cache keys. !8775 +- Support older NGINX version forwarding the client certificate for smartcard auth. !8784 +- Remove duplicated smartcard login button. !8793 +- Disable password autocomplete in mirror form fill. + +### Deprecated (1 change) + +- Deprecate non-hashed repository storage for Geo installations. !8739 + +### Changed (17 changes, 1 of them is from the community) + +- Adds Group SAML metadata endpoint. !5782 +- Group SAML SSO page warns when linking account. !8295 +- Change the delete custom metric alert. !8430 +- Replace weight icon. !8448 (George Tsiolis) +- Switch snowplows stateStorageStrategy to cookie. !8461 +- Move merge request approval settings. !8493 +- Geo: Constantly reverify repositories. !8550 +- Add file and line numbers to issues created from SAST vulnerabilities. !8578 +- Redesign MR header sections and approvals (EE). !8593 +- Add packages_enabled attribute to Projects API. !8604 +- Run geo check task from gitlab check. !8616 +- Change issue create weight dropdown to an input. !8648 +- Add epics state filtering in roadmap view. !8658 +- Users can unlink Group SAML from accounts page. !8682 +- Update casing in Built-in on project templates tab. !8688 +- Epic issue list and related issue list re-design. +- Add sort direction button with sort dropdown for Epics and Roadmap. + +### Performance (5 changes, 3 of them are from the community) + +- Remove partial index for projects on mirror and mirror_last_update_at. !8585 +- Enable some frozen string in ee/app. !8667 (gfyoung) +- Remove redundant indices for is_sample on push_rules and next_execution_timestamp on project_mirror_data. !8695 +- Enable some frozen string in ee/app. (gfyoung) +- Enable some frozen string in ee/app. (gfyoung) + +### Added (10 changes) + +- Add support for Group-level project templates. !6878 +- Added web terminals to Web IDE. !7386 +- Promote an Issue to an Epic using quick action. !8051 +- Smartcard authentication. !8120 +- Adds Security dashboard empty state. !8443 +- Add vulnerability history at group level. !8603 +- Adds group security dashboard metrics chart. !8631 +- Add milestones autocomplete for epics. !8632 +- Parse and store dependency scanning reports in database. !8642 +- Adds EE store to handle upstream & downstream pipelines. + +### Other (13 changes, 4 of them are from the community) + +- Add subscription table to GitLab.com billing areas. !7885 +- UX improvements for the group security dashboard. !8217 +- Restyles the dismissed vulnerabilities. !8401 +- Adds PHILOSOPHY.md and references GitLab Product Handbook. !8515 +- Make sidekiq-cluster play well with Sidekiq 5.2.2+. !8522 +- Rails5: Passing a class as a value in an Active Record query is deprecated. !8540 (Jasper Maes) +- render :nothing option is deprecated, Use head method to respond with empty response body. !8560 (Jasper Maes) +- Add help page link for licence management in CI/CD settings. !8561 (George Tsiolis) +- Re-orders the Group Security Dashboard. !8624 +- Move EE only differences for finders. !8629 (George Tsiolis) +- Add count of projects with at least one package to a usage ping data. !8641 +- Added recommendations for handling deleted documents in Elasticsearch. +- Use new information-o icon for Security Dashboard. + + +## 11.5.11 (2019-04-23) + +### Security (1 change) + +- Respect group membership lock when importing a member from another group. + + +## 11.5.8 (2019-01-28) + +### Security (6 changes) + +- Avoid leaking unauthorized approver group members. !766 +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !793 +- Check access rights when creating/updating ProtectedRefs. +- Fix locked file visibility issue for private repositories. +- Filter out non-project member approvers. +- Remove HTTP POST in JIRA OAuth access_token endpoint. + + +## 11.5.5 (2018-12-20) + +- No changes. + +## 11.5.3 (2018-12-06) + +- No changes. + +## 11.5.2 (2018-12-03) + +### Fixed (2 changes) + +- Fix inability to scroll dashboard. !8459 +- Fix issues analytics query when ordering issues by priority. !8509 + + +## 11.5.1 (2018-11-26) + +### Security (6 changes) + +- Sanitize tracing external_urls before saving to DB and when displaying the URL to prevent XSS issues. +- Prevent reporter roles from viewing the Jaeger tracing settings page. +- Fix IDOR at /drafts/publish. +- Authorize users when listing board users and milestones. +- Resolve: Guest can set weight of a new issue. +- Fixes XSS with merge request approvers selection. + + +## 11.5.0 (2018-11-22) + +### Security (2 changes) + +- Escape entity title while autocomplete template rendering to prevent XSS. !696 +- Prevent templated services from being imported. + +### Removed (1 change) + +- Remove security report summary from pipelines view. !7844 + +### Fixed (25 changes, 3 of them are from the community) + +- Geo: Remove connectivity check from primary to secondary from gitlab:geo:check rake task. !7821 +- Include (closed) for closed epics in parsed text. !7946 +- Add new state to the cluster application vue app. !7954 +- Do not allow to assign an issue to an epic twice. !8004 +- [Geo] Fix: Deleting a project leaves orphaned LFS objects and CI Job artifacts around. !8031 +- Support `/client/features` Unleash endpoint. !8045 +- Fix button rendering in license management in FF. !8046 +- Geo: Handle orphaned Uploads records. !8054 +- Geo - Redirect user back to the secondary after a logout & re-login via the primary. !8157 +- Fix approver removal still being conducted even when "Cancel" is clicked in confirmation prompt. !8178 +- Link project short SHA to commit url. !8214 +- Update ops dashboard remove dropdown button. !8236 (George Tsiolis) +- Clear ops dashboard project search input on submit. !8239 (George Tsiolis) +- Fixes a dismissed vulnerability bug on the group security dashboard. !8343 +- Fixes missing fields on the group security dashboard. !8360 +- Fixes the view issue button in the Group Security Dashboard. !8385 +- Ops Dashboard should be available for public projects on GitLab.com. !8399 +- Update draft comments design to match new design. !8405 +- Change issues analytics breadcrumb. !8414 (George Tsiolis) +- Include classification label in project API. !8426 +- Fix Pod Log topbar position when perf bar is disabled. +- Always proxy reports downloads. +- Removes extra rigth margin from job page. +- Geo: Rails console message display primary/secondary state incorrectly. +- Disable Feature Flags and Packages if repository is disabled. + +### Changed (13 changes, 1 of them is from the community) + +- Add test button to Group SAML settings. !5622 +- Group SAML status badges on members page. !5807 +- Update related issues list styling to be more space efficient. !7784 +- Refactor test reports to use new artifact architecture. !7827 +- Add timeline icon for issue weights. !7847 (George Tsiolis) +- Added a search bar to `Admin > Geo > Projects`. !8079 +- Geo: Deprecate source installations instructions. !8134 +- Does not synchronize default branch for pull mirrors. !8138 +- Adds split error states for the group security dashboard. !8208 +- Geo: Improve read-only message in secondary nodes for actionable screens. !8238 +- Improve error messages for operations dashboard. !8244 +- Add documentation link to ops dashboard. !8296 +- Issue board card design. !21229 + +### Added (24 changes, 1 of them is from the community) + +- Group-level file templates. !7391 +- Adds group-level Security Dashboard counts. !7564 +- Parse SAST reports and store vulnerabilities in database. !7578 +- elasticsearch 6 support - migrate from parent/child relationships to join. !7618 +- Geo: Admin > Geo > Projects support for batch operations. !7806 +- Create system notes for epic close and reopen. !7850 +- Add Tracing landing and settings page. !7903 +- Add modals and actions to the vulnerabilities in the Group security dashboard. !7910 +- Assign code owner as approver. !7933 +- Enable previewing of draft review comments. !7936 +- Audit log: Add logging for project feature changes. !7962 +- Add project operations dashboard. !7973 +- Audit log: Add audit events for group setting changes. !7987 +- Add approve quick action. !7989 +- Show actual Milestone dates within tooltips for Milestones in Epics sidebar. !8048 +- Allow filtering by weight in issues API. !8140 (Heinrich Lee Yu) +- Filter epics by state in API. !8179 +- Support epics autocomplete for project objects. !8180 +- Add 'l', 'r' and 'e' keyboard shortcuts support in Epic. !8203 +- Configurable GitHub static context for statuses integration. !8235 +- Send notifications for epic status change. !8247 +- Support license management and performance using new reports syntax. +- Support reports: for project security dashboard. +- Add chart of issues created per month. + +### Other (17 changes, 11 of them are from the community) + +- Update boards list selector specs. !6266 (George Tsiolis) +- Write some Geo development documentation. !7452 +- Connects the Group Security Dashboard API and Frontend. !7793 +- Rails5: Fix epics finder count_key method In Rails5, the state enum value is passed instead of the database integer. !7822 (Jasper Maes) +- Rails 5: fix presence message validation for prometheus_alert. !7823 (Jasper Maes) +- Rails 5: fix mysql milliseconds problem in prometheus alert event spec. !7828 (Jasper Maes) +- Rails5: fix VulnerabilitySummaryEntity. !7893 (Jasper Maes) +- Update feature flags empty state. !7967 (George Tsiolis) +- Adds the security dashboard link. !7974 +- Remove tooltip on sidebar text buttons. !8021 (George Tsiolis) +- Add a metric to the usage ping data to track the number of projects with at least one alert. !8058 +- Remove unneeded permission checks from the mirror repositories partial. !8077 +- Rails5: fix flaky mysql reset pipeline minutes spec. !8122 (Jasper Maes) +- Move `prepend` outside the `class` block for finders. !8192 (George Tsiolis) +- Rails5: fix operations controller spec nil parameter. !8209 (Jasper Maes) +- Update related issues title typography. !8267 (George Tsiolis) +- Geo: Clarify Geo HA documentation. + + +## 11.4.9 (2018-12-03) + +- No changes. + +## 11.4.8 (2018-11-27) + +### Security (5 changes) + +- Escape entity title while autocomplete template rendering to prevent XSS. !707 +- Authorize users when listing board users and milestones. +- Fix IDOR at /drafts/publish. +- Resolve: Guest can set weight of a new issue. +- Fixes XSS with merge request approvers selection. + + +## 11.4.7 (2018-11-20) + +### Fixed (1 change) + +- Fix code owner as merge request suggestion not available under Starter plan. !8248 + + +## 11.4.6 (2018-11-18) + +### Security (1 change) + +- Prevent templated services from being imported. + + +## 11.4.5 (2018-11-04) + +### Fixed (1 change) + +- Stops showing review actions on commit discussions in merge requests. !8007 + +### Performance (1 change) + +- Add indexes to all geo event foreign keys. !7990 + + +## 11.4.4 (2018-10-30) + +- No changes. + +## 11.4.3 (2018-10-26) + +- No changes. + +## 11.4.2 (2018-10-25) + +### Security (1 change) + +- Escape entity title while autocomplete template rendering to prevent XSS. !707 + + +## 11.4.1 (2018-10-23) + +- No changes. + +## 11.4.0 (2018-10-22) + +### Security (3 changes) + +- Properly filter private references from system notes. +- Project groups approvers no longer leak private groups info. +- Protect against CSRF attacks when adding Slack app. + +### Removed (1 change) + +- remove unnecessary help text from container scanning results. !7304 + +### Fixed (18 changes, 1 of them is from the community) + +- Prune all the Geo event log tables correctly. !6175 +- Synchronize the default branch when updating a pull mirror. !7242 +- Pushing to a merge request clears the approvals list even if the respective project setting is enabled and there is no fixed required number of approvals configured. !7328 +- Align epics and roadmap empty state buttons to the center. !7358 (George Tsiolis) +- Add link to issue on epic. !7407 +- Check for force env var when rebuilding auth_keys. !7419 +- Update popover URL to point to help page of same domain. !7446 +- Geo - Does not raise error 500 on Geo projects list page for orphaned entries. !7565 +- Show promotion for epics on issues. !7602 +- Fix Epic subscription toggle behaviour. !7723 +- Geo - Send a cache invalidation event via the log cursor whenever features are changed on the primary. !7738 +- Fix epic milestone dates incorrect after issue is linked to another epic. !7809 +- Fixes warning for used minutes in runner showing when user still has minutes. !7843 +- Fix disappearing weight input in Firefox. !7869 +- Don't synchronize default branch when updating a SSH mirror. !7891 +- Fix broken tokenization for filtered search bar in Epics. !7972 +- Fix bug when resolving a discussion via a batch comment published right away. +- Fix wrong color in resolve/unresolve checkbox when using MR reviews. + +### Changed (14 changes) + +- Geo: Decrease frequency of project shard schedulers when few projects to schedule. !7287 +- Added placeholder to weight input for issue sidebar. !7346 +- updated icons used in filtered search dropdowns. !7356 +- Geo: Display helpful feedback when proxying an SSH git push to secondary request. !7357 +- Geo - Include keep-around and other Gitlab-specific references in the checksum calculation. !7367 +- Polish security report externalizations. !7373 +- Listen for resolved Prometheus alerts. !7382 +- Rename date related labels for Epics. !7447 +- Add reports CI syntax for Code Quality reports. !7465 +- Support short reference to epics from project entities. !7475 +- Geo: Downgrade Exclusive Lease warnings from Log Cursor to debug. !7476 +- Geo: Allow nodes to be editable in more scenarios. !7832 +- Account for issues created in the middle of a milestone in burndown chart. +- [Geo] Add CI job artifact numbers to rake geo:status. + +### Performance (1 change) + +- Update DB model for security reports. + +### Added (20 changes, 1 of them is from the community) + +- Batch comments on merge requests. !4213 +- Use Geo log to remove files when migrated to object storage. !5966 +- Add support for closing epics. !7302 +- Add `auditor_groups` configuration so Audit users can be specified using SAML groups. !7340 (St. John Johnson) +- Geo - Add an event to reset checksums on Geo secondary nodes. !7394 +- Starts adding the dashboard page view. !7400 +- Add `Manage licenses` button to MR widget and pipelines view. !7411 +- Add Open/Closed epics tabs in list view. !7424 +- Add Feature Flags MVC. !7433 +- Suggest approvers based on code owners. !7437 +- Geo: Add a backoff time to few Geo workers to save resources. !7470 +- Persist Prometheus alert events. !7493 +- Geo: Added a button to Admin UI > Geo Nodes to open Geo Projects screen of any secondary node. !7512 +- Show Alert Thresholds on monitoring dashboards. !7538 +- Support autocomplete for commands in epics. !7588 +- Add form to enter licenses manually. !7603 +- Geo: Added `All` tab in Geo Nodes > Projects. !7745 +- Geo: Add a Geo Status Widget to Admin > Projects. !7789 +- Add data model and migration for vulnerabilities. +- Adds Batch Comments to Merge Requests [EEP]. + +### Other (8 changes, 1 of them is from the community) + +- Add runner quota information to job API. !7233 +- Resolve "ee:geo QA specs are failing as of !7210". !7315 +- remove readme checkbox from "create project" page. !7332 +- Create a generic JS function that we can apply to being able to track arbitrary events. !7403 +- Rename Admin Area Geo Nodes nav item to Geo. !7466 +- Group weight icon and text on issue list and issue boards. !7484 (George Tsiolis) +- Adds expandable/collapsable section for Snowplow. !7798 +- API: Allow issue weight parameter to be greater than or equal to zero. + + +## 11.3.14 (2018-12-20) + +- No changes. + +## 11.3.13 (2018-12-13) + +- No changes. + +## 11.3.11 (2018-11-26) + +### Security (7 changes) + +- Escape entity title while autocomplete template rendering to prevent XSS. !697 +- Properly filter private references from system notes. +- Authorize users when listing board users and milestones. +- Project groups approvers no longer leak private groups info. +- Resolve: Guest can set weight of a new issue. +- Fixes XSS with merge request approvers selection. +- Protect against CSRF attacks when adding Slack app. + + +## 11.3.10 (2018-11-18) + +- No changes. + +## 11.3.9 (2018-10-31) + +- No changes. + +## 11.3.8 (2018-10-27) + +- No changes. + +## 11.3.7 (2018-10-26) + +### Security (1 change) + +- Escape entity title while autocomplete template rendering to prevent XSS. !697 + + +## 11.3.6 (2018-10-17) + +### Fixed (1 change) + +- Don't reset the default branch when repository mirroring is enabled. !7944 + + +## 11.3.5 (2018-10-15) + +### Fixed (1 change) + +- Fix epic milestone dates incorrect after issue is linked to another epic. !7809 + + +## 11.3.4 (2018-10-05) + +### Security (1 change) + +- Properly filter private references from system notes. + + +## 11.3.3 (2018-10-04) + +- No changes. + +## 11.3.2 (2018-10-03) + +### Fixed (1 change) + +- Geo: repository shard verification job should have unique lease keys per shard name. !7474 + + +## 11.3.1 (2018-09-26) + +### Security (2 changes) + +- Project groups approvers no longer leak private groups info. +- Protect against CSRF attacks when adding Slack app. + + +## 11.3.0 (2018-09-22) + +### Security (1 change) + +- Prevent regular users from moving projects to different storage shards. + +### Fixed (29 changes, 11 of them are from the community) + +- don't add empty query params to boards. !4441 +- Geo: sync disabled wikis. !6420 +- Rails 5 fix alerts controller spec for post json parameters. !6795 (Jasper Maes) +- Fixes 500 error on user creation from admin panel with spaced username. !6804 (Jacopo Beschi @jacopo-beschi) +- Don't show search results for projects that have been deleted when using elastic search. !6830 +- Geo: Use database-cached status if redis-cached status is unavailable. !6854 +- [Geo] Fix: Custom favicons not being replicated by Geo. !6860 +- Rails5 fix AddMilestoneToLists migration rollback deleting wrong foreign key. !6865 (Jasper Maes) +- Rails5 fix passing Group objects array into for_projects_and_groups milestone scope. !6873 (Jasper Maes) +- Rails5: fix mysql milliseconds problem in project_import_state_spec. !6874 (Jasper Maes) +- Fix Jira integration duplicating branches and MRs. !6876 +- Rails5: fix mysql milliseconds problem in project_spec. !6880 (Jasper Maes) +- Remove https from Snowplow Collector URI placeholder in Admin Areawq. !6886 +- Geo: Replicate keep around refs. !6922 +- Fixes bug that prevented a user from seeing the system header and footer settings on the admin dashboard. !6926 +- Rails5 fix duplicate gpg signature in path lock spec. !6939 (Jasper Maes) +- Rails5: Fix audit event spec. !6940 (Jasper Maes) +- Rails5: fix mysql milliseconds problem in project registry spec. !6943 (Jasper Maes) +- LDAP - Does not update permissions on a read-only database. !6965 +- Rails5 fix project import spec. !6981 (Jasper Maes) +- Geo: Resolve sticky failures when attachments are missing on primary. !6991 +- Geo: LFS batch downloads are OK to be handled by secondary. !7209 +- Geo - Synchronize the default branch in secondary nodes. !7218 +- Handle fixed dates seperately from selected dates in Epics. !7227 +- Fix tooltip string to support dynamic date type in Epic sidebar. !7243 +- Fix an error in docs about fetching artifacts using API. !7244 +- Return proper status code when creation of an alert fails. !7360 (Peter Leitzen) +- Geo - Find the remote root ref using a JWT header for authentication. !7405 +- Add weight to issue hook. + +### Changed (3 changes, 1 of them is from the community) + +- Allow push_code when auth'd via Geo JWT. !6455 +- Prefer From address over Sender for Service Desk emails. !7006 (Andreas Josephson) +- Add CI Job token support to Maven packages API. !7249 + +### Performance (3 changes) + +- Reduce queries needed for CI artifacts on merge request widget. !6978 +- Use limited count approach on Protected Environments view. !6987 +- Limit sidekiq-cluster concurrency to a maximum of 50. !7025 + +### Added (15 changes, 2 of them are from the community) + +- Allow custom notification for new epic event. !5863 +- Geo: SSH git push to secondary -> proxy to Primary. !6456 +- Allow epic start/due dates to be sourceable from issue milestones. !6470 +- Add ability to upload and download maven packages from/to GitLab. !6607 +- Added an instance-level license template project. !6631 (Dan Barker) +- Add backend structure for ProtectedEnvironments. !6672 +- Add UI for GitLab private Maven repository feature. !6781 +- Add support for sorting epics. !6885 +- Allow specifying code owners in a CODEOWNERS file. !6916 +- Quick action for adding/removing epic to issues. !6934 +- Show total and completed instances deployed on deploy boards. !6955 +- Show security analysis status on the environments page. !6987 +- Add Instance Review for Core users. !6995 +- Introduce custom instance-level templates for Dockerfile, .gitignore, and .gitlab-ci.yml files. !7000 +- Adds Rubocop rule to enforce class_methods over module ClassMethods. !7044 (Jacopo Beschi @jacopo-beschi) + +### Other (4 changes) + +- Removes feature flag code surrounding Protected Environments feature. !7338 +- Creates vue component for shared runner limit. +- Allow MR authors to approve their MRs. +- Remove differences between CE and EE settings panel component. + + +## 11.2.8 (2018-10-31) + +- No changes. + +## 11.2.7 (2018-10-27) + +- No changes. + +## 11.2.6 (2018-10-26) + +### Security (1 change) + +- Escape entity title while autocomplete template rendering to prevent XSS. !698 + + +## 11.2.5 (2018-10-05) + +### Security (1 change) + +- Properly filter private references from system notes. + + +## 11.2.4 (2018-09-26) + +### Security (2 changes) + +- Project groups approvers no longer leak private groups info. +- Protect against CSRF attacks when adding Slack app. + + +## 11.2.3 (2018-08-28) + +- No changes. + +## 11.2.2 (2018-08-27) + +### Security (1 change) + +- Prevent regular users from moving projects to different storage shards. + + +## 11.2.1 (2018-08-22) + +- No changes. + +## 11.2.0 (2018-08-22) + +### Security (1 change) + +- Don't expose project names in EE counters. + +### Fixed (32 changes, 11 of them are from the community) + +- Allow Geo node to be edited once the database is failed over. !6248 +- Fix a bug where user was unable to delete a branch when repo size was above the limit. !6373 +- Rails5 fix AttachmentRegistryFinder arel queries. !6396 (Jasper Maes) +- Add Premium license checks for system messages. !6460 +- Fixes arrow-icon color and alignment in linked pipeline in merge request widget. !6479 +- Rails 5 fix the matcher expected the ApplicationSetting to be invalid, but it was valid instead. !6488 (Jasper Maes) +- Geo: Gracefully handle deleted events from Geo event log. !6506 +- Rails5 fix NoMethodError: undefined method 'message' for nil:NilClass. !6507 (Jasper Maes) +- Fix billing card title colors. !6563 +- Rails5 fix undefined method 'namespace_project_settings_repository_path'. !6581 (Jasper Maes) +- Rails5 fix no implicit conversion of Symbol into Integer. !6582 (Jasper Maes) +- Rails 5 fix NoMethodError: undefined method 'message' for nil:NilClass in host_spec.rb. !6589 (Jasper Maes) +- Fix mobile view of pod logs. !6597 +- Add left-padding to diverged-from-upstream label. !6647 +- List groups with developer maintainer access on project creation. !6678 +- no longer fail when setting up Geo database with GDK. !6680 +- Allow Pseudonymizer to write to a bucket without having permissions to see all buckets. !6682 +- Hide Expand button on empty MR widget Performance section. !6685 +- Ensure that Create issue button is shown in vulnerability dialog. !6708 +- Use same gem versions for Rails 5 as for Rails 4. !6712 (Jasper Maes) +- Rails5 correct wrong geo job name. !6713 (Jasper Maes) +- Elasticsearch: Fix a bug causing some types of note to miss being indexed. !6736 +- Rails 5 fix product array method delagation by manually calling .to_a in NotificationService. !6753 (Jasper Maes) +- Adjust self-hosted Jira development panel integration. !6756 +- Ensure that push size checks only count the size of newly-pushed files. !6767 +- Fix the UI for listing system-level labels. !6805 +- Rails5: fix slice in burndown fixture. !6813 (Jasper Maes) +- Rails5: fix Arel::UpdateManager in MigrateOldElasticsearchSettings migration. !6815 (Jasper Maes) +- Corrected URL for snowplow client side JS. !6899 +- [Geo] Fix the Storage config parameter in Geo nodes admin page. +- Fix exporting issues to CSV when sorting by label priority is used. +- Fix handling of annotated tags when Gitaly is not in use. + +### Changed (9 changes, 2 of them are from the community) + +- Add related issues loading icon top margin. !6527 (George Tsiolis) +- Add security products to usage ping. !6602 +- Changed copy for "Approved" state in merge request widget. !6635 (Constance Okoghenun) +- Track the Geo event log gaps in redis and handle them later. !6640 +- Replace clipboard icon in Service Desk settings. !6643 +- Removes "show all" on security reports and adds a button to take you to the pipeline page. !6675 +- Shows license reports when there are no reports in the source branch. !6720 +- Removes status text from licence reports. !6802 +- Opens "view full report" links in a new window. !6806 + +### Performance (2 changes) + +- Geo: Improve Geo Status API performance with cached counters in SiteStatistic. !6328 +- Geo: Improve performance in Log Cursor gap tracking. !6754 + +### Added (19 changes) + +- Geo: Add repository verification failures to API. !6137 +- Add support for todos on epics. !6142 +- Summed issue weights in board columns. !6218 +- Add an API endpoint for managed licenses of a project. !6246 +- Implement custom project templates. !6436 +- Projects page under Admin > Geo Nodes to display detailed synchronization information. !6452 +- Enables configuration of pull mirroring through API. !6485 +- Adds SLI alerts to custom prometheus metrics. !6590 +- Add support for milestones lists on the issue boards. !6615 +- Persist Epic Roadmap timescale choice. !6637 +- Add license management frontend. !6638 +- Add Snowplow integration. !6642 +- Add Security Dashboard to project quick links. !6652 +- Show License Management at pipeline level. !6688 +- Add Frontend for Instance-level project templates. !6740 +- Geo - Actively try to correct verification failures on the secondary. !6759 +- Add Prometheus metrics to track Geo autocorrect numbers. !6778 +- Link the License Management report in the MR widget with the pipeline level one. !6800 +- Allow creating assignee lists via API. + +### Other (8 changes, 1 of them is from the community) + +- Move merge requests EE helper methods. !6461 (George Tsiolis) +- Add additional logging for Geo Log Cursor. !6513 +- Ensure no weight change system notes end with a superfluous comma. !6571 +- Track registries marked as synced when repository does not found. !6694 +- Removes EE specific CSS that was moved to CE. !6723 +- Geo: Add rake task to resync projects where verification has failed. !6727 +- updates column sizes in licence and security modals. !6808 +- Geo: Log to geo.log when the Log Cursor skips an event. + + +## 11.1.7 (2018-09-26) + +### Security (2 changes) + +- Project groups approvers no longer leak private groups info. +- Protect against CSRF attacks when adding Slack app. + + +## 11.1.6 (2018-08-28) + +- No changes. + +## 11.1.5 (2018-08-27) + +- No changes. +### Security (1 change) + +- Prevent regular users from moving projects to different storage shards. + + +## 11.1.4 (2018-07-30) + +- No changes. + +## 11.1.3 (2018-07-27) + +### Fixed (1 change) + +- Resolve Environments dropdown is showing on the cluster health page. !6528 + + +## 11.1.2 (2018-07-26) + +### Security (1 change) + +- Don't expose project names in EE counters. + + +## 11.1.1 (2018-07-23) + +### Fixed (2 changes) + +- Fix geo download service ImportExportDownloader unitialized constant. !6567 +- Geo - Allow repository verification to be disabled on a secondary node. !6599 + + +## 11.1.0 (2018-07-22) + +### Removed (1 change) + +- Drop ignored Geo repository_storage_path columns. !5468 + +### Fixed (19 changes, 7 of them are from the community) + +- Log audit and Geo events within a project destroy transaction. !6059 +- Do not pre-select previous user(s) when creating protected branches. !6112 +- Group SAML settings link hidden when unlicensed. !6147 +- Geo: Fix repository/wiki sync race condition with multiple updates, especially in quick succession. !6161 +- [Rails5] Fix error on missed :authenticate_user callback. !6257 (@blackst0ne) +- Rails5 fix expected: ({...}) got: ( to clipboard. !1048 + +## 8.15.8 (2017-03-19) + +- No changes. +- No changes. +- Elastic security fix: Respect feature visibility level. + +## 8.15.7 (2017-02-15) + +- No changes. + +## 8.15.6 (2017-02-14) + +- No changes. + +## 8.15.5 (2017-01-20) + +- No changes. + +## 8.15.4 (2017-01-09) + +- No changes. + +## 8.15.3 (2017-01-06) + +- Disable LDAP permission override in project members edit list. +- Perform only one fetch per push on Geo secondary nodes. + +## 8.15.2 (2016-12-27) + +- No changes. +- Fix ES search for non-default branches. + +## 8.15.1 (2016-12-23) + +- Fix 404/500 error while navigating to the 'show/destroy' pages. !993 + +## 8.15.0 (2016-12-22) + +- Adds a check ensure only active, ie. non-blocked users can be emailed from the admin panel. +- Add user activities API. +- Add milestone total weight to the milestone summary. +- Allow master/owner to change permission levels when LDAP group sync is enabled. !822 +- Geo: Improve project view UI to teach users how to clone from a secondary Geo node and push to a primary. !905 +- Technical debt follow-up from restricting pushes / merges by group. !927 +- Geo: Enables nodes to be removed even without proper license. !978 +- Update validates_hostname to 1.0.6 to fix a bug in parsing hexadecimal-looking domain names. !982 + +## 8.14.10 (2017-02-15) + +- No changes. + +## 8.14.9 (2017-02-14) + +- No changes. + +## 8.14.8 (2017-01-25) + +- No changes. + +## 8.14.7 (2017-01-21) + +- No changes. + +## 8.14.6 (2017-01-10) + +- No changes. + +## 8.14.5 (2016-12-14) + +- Add milestone total weight to the milestone summary. + +## 8.14.4 (2016-12-08) + +- No changes. + +## 8.14.3 (2016-12-02) + +- No changes. + +## 8.14.2 (2016-12-01) + +- No changes. + +## 8.14.1 (2016-11-28) + +- Fix: MergeRequestSerializer breaks on MergeRequest#rebase_dir_path when source_project doesn't exist anymore. + +## 8.14.0 (2016-11-22) + +- Added Backfill service for Geo. !861 +- Fix for autosuggested approvers(https://gitlab.com/gitlab-org/gitlab/issues/1273). +- Gracefully recover from previously failed rebase. +- Disable retries for remote mirror update worker. !848 +- Fix Approvals API documentation. +- Add ability to set approvals_before_merge for project through the API. +- gitlab:check rake task checks ES version according to requirements +- Convert ASCII-8BIT LDAP DNs to UTF-8 to avoid unnecessary user deletions +- [Fix] Only owner can see "Projects" button in group edit menu + +## 8.13.12 (2017-01-21) + +- No changes. + +## 8.13.11 (2017-01-10) + +- No changes. + +## 8.13.10 (2016-12-14) + +- No changes. + +## 8.13.9 (2016-12-08) + +- No changes. + +## 8.13.8 (2016-12-02) + +- No changes. + +## 8.13.7 (2016-11-28) + +- No changes. + +## 8.13.6 (2016-11-17) + +- Disable retries for remote mirror update worker. !848 +- Fixed cache clearing on secondary Geo nodes. !869 +- Geo: fix a problem that prevented git cloning from secondary node. !873 + +## 8.13.5 (2016-11-08) + +- No changes + +## 8.13.4 (2016-11-07) + +- Weight dropdown in issue filter form does not stay selected. !826 + +## 8.13.3 (2016-11-02) + +- No changes + +## 8.13.2 (2016-10-31) + +- Don't pass a current user to Member#add_user in LDAP group sync. !830 + +## 8.13.1 (2016-10-25) + +- Hide multiple board actions if user doesnt have permissions. !816 +- Fix Elasticsearch::Transport::Transport::Errors::BadRequest when ES is enabled. !818 + +## 8.13.0 (2016-10-22) + +- Cache the last usage data to avoid unicorn timeouts +- Add user activity table and service to query for active users +- Fix 500 error updating mirror URLs for projects +- Restrict protected branch access to specific groups !645 +- Fix validations related to mirroring settings form. !773 +- Add multiple issue boards. !782 +- Fix Git access panel for Wikis when Kerberos authentication is enabled (Borja Aparicio) +- Decrease maximum time that GitLab waits for a mirror to finish !791 (Borja Aparicio) +- User groups (that can be assigned as approvers) +- Fix a search for non-default branches when ES is enabled +- Re-organized the Sidekiq queues for EE specific workers + +## 8.12.12 (2016-12-08) + +- No changes. + +## 8.12.11 (2016-12-02) + +- No changes. + +## 8.12.10 (2016-11-28) + +- No changes. + +## 8.12.9 (2016-11-07) + +- No changes + +## 8.12.8 (2016-11-02) + +- No changes + +## 8.12.7 + + - No EE-specific changes + +## 8.12.6 + + - No EE-specific changes + +## 8.12.5 + + - No EE-specific changes + +## 8.12.4 + + - [ES] Indexer works with smaller batches of repositories to not exceed NOFILE limit. !774 + +## 8.12.3 + + - Fix prevent_secrets checkbox on admin view + +## 8.12.2 + + - Fix bug when protecting a branch due to missing url paramenter in request !760 + - Ignore unknown project ID in RepositoryUpdateMirrorWorker + +## 8.12.1 + + - Prevent secrets to be pushed to the repository + - Prevent secrets to be pushed to the repository + +## 8.12.0 (2016-09-22) + + - Include more data in EE usage ping + - Reduce UPDATE queries when moving between import states on projects + - [ES] Instrument Elasticsearch::Git::Repository + - Request only the LDAP attributes we need + - Add 'Sync now' to group members page !704 + - Add repository size limits and enforce them !740 + - [ES] Instrument other Gitlab::Elastic classes + - [ES] Fix: Elasticsearch does not find partial matches in project names + - Faster Active Directory group membership resolution !719 + - [ES] Global code search + - [ES] Improve logging + - Fix projects with remote mirrors asynchronously destruction + +## 8.11.11 (2016-11-07) + +- No changes + +## 8.11.10 (2016-11-02) + +- No changes + +## 8.11.9 + + - No EE-specific changes + +## 8.11.8 + + - No EE-specific changes + +## 8.11.7 + + - Refactor Protected Branches dropdown. !687 + - Fix mirrored projects allowing empty import urls. !700 + +## 8.11.6 + + - Exclude blocked users from potential MR approvers. + +## 8.11.5 + + - API: Restore backward-compatibility for POST /projects/:id/members when membership is locked + +## 8.11.4 + + - No EE-specific changes + +## 8.11.3 + + - [ES] Add logging to indexer + - Fix missing EE-specific service parameters for Jenkins CI + - Set the correct `GL_PROTOCOL` when rebasing !691 + - [ES] Elasticsearch workers checks ES settings before running + +## 8.11.2 + + - Additional documentation on protected branches for EE + - Change slash commands docs location + +## 8.11.1 + + - Pulled due to packaging error. + +## 8.11.0 (2016-08-22) + + - Allow projects to be moved between repository storages + - Add rake task to remove old repository copies from repositories moved to another storage + - Performance improvement of push rules + - Temporary fix for #825 - LDAP sync converts access requests to members. !655 + - Optimize commit and diff changes access check to reduce git operations + - Allow syncing a group against all providers at once + - Change LdapGroupSyncWorker to use new LDAP group sync classes + - Allow LDAP `sync_ssh_keys` setting to be set to `true` + - Removed unused GitLab GEO database index + - Restrict protected branch access to specific users !581 + - Enable monitoring for ES classes + - [Elastic] Improve code search + - [Elastic] Significant improvement of global search performance + - [Fix] Push rules check existing commits in some cases + - [ES] Limit amount of retries for sidekiq jobs + - Fix Projects::UpdateMirrorService to allow tags pointing to blob objects + +## 8.10.12 + + - No EE-specific changes + +## 8.10.11 + + - No EE-specific changes + +## 8.10.10 + + - No EE-specific changes + +## 8.10.9 + + - Exclude blocked users from potential MR approvers. + +## 8.10.8 + + - No EE-specific changes + +## 8.10.7 + + - No EE-specific changes + +## 8.10.6 + + - Fix race condition with UpdateMirrorWorker Lease. !641 + +## 8.10.5 + + - Used cached value of project count in `Elastic::RepositoriesSearch` to reduce DB load. !637 + +## 8.10.4 + + - Fix available users in userselect dropdown when there is more than one userselect on the page. !604 (Rik de Groot) + - Fix updating skipped approvers in search list on removal. !604 (Rik de Groot) + +## 8.10.3 + + - Fix regression in Git Annex permission check. !599 + - [Elastic] Fix commit search for some URLs. !605 + - [Elastic][Fix] Commit search breaks for some URLs on gitlab-ce project + +## 8.10.2 + + - Fix pagination on search result page when ES search is enabled. !592 + - Decouple an ES index update from `RepositoryUpdateMirrorWorker`. !593 + - Fix broken `user_allowed?` check in Git Annex push. !597 + +## 8.10.1 + + - No EE-specific changes + +## 8.10.0 (2016-07-22) + + - Add EE license usage ping !557 + - Rename Git Hooks to Push Rules + - Fix EE keys fingerprint add index migration if came from CE + - Add todos for MR approvers !547 + - Replace LDAP group sync exclusive lease with state machine + - Prevent the author of an MR from being on the approvers list + - Isolate EE LDAP library code in EE module (Part 1) !511 + - Make Elasticsearch indexer run as an async task + - Fix of removing wiki data from index when project is deleted + - Ticket-based Kerberos authentication (SPNEGO) + - [Elastic] Suppress ActiveRecord::RecordNotFound error in ElasticIndexWorker + +## 8.9.10 + + - No EE-specific changes + +## 8.9.9 + + - No EE-specific changes + +## 8.9.8 + + - No EE-specific changes + +## 8.9.7 + + - No EE-specific changes + +## 8.9.6 + + - Avoid adding index for key fingerprint if it already exists. !539 + +## 8.9.5 + + - Fix of quoted text in lock tooltip. !518 + +## 8.9.4 + + - Improve how File Lock feature works with nested items. !497 + +## 8.9.3 + + - Fix encrypted data backwards compatibility after upgrading attr_encrypted gem. !502 + - Fix creating MRs on forks of deleted projects. !503 + - Roll back Grack::Auth to fix Git HTTP SPNEGO. !504 + +## 8.9.2 + + - [Elastic] Fix visibility of snippets when searching. + +## 8.9.1 + + - Improve Geo documentation. !431 + - Fix remote mirror stuck on started issue. !491 + - Fix MR creation from forks where target project has approvals enabled. !496 + - Fix MR edit where target project has approvals enabled. !496 + - Fix vertical alignment of git-hooks page. !499 + +## 8.9.0 (2016-06-22) + + - Fix JenkinsService test button + - Fix nil user handling in UpdateMirrorService + - Allow overriding the number of approvers for a merge request + - Allow LDAP to mark users as external based on their group membership. !432 + - Instrument instance methods of Gitlab::InsecureKeyFingerprint class + - Add API endpoint for Merge Request Approvals !449 + - Send notification email when merge request is approved + - Distribute RepositoryUpdateMirror jobs in time and add exclusive lease on them by project_id + - [Elastic] Move ES settings to application settings + - Always allow merging a merge request whenever fast-forward is possible. !454 + - Disable mirror flag for projects without import_url + - UpdateMirror service return an error status when no mirror + - Don't reset approvals when rebasing an MR from the UI + - Show flash notice when Git Hooks are updated successfully + - Remove explicit Gitlab::Metrics.action assignments, are already automatic. + - [Elastic] Project members with guest role can't access confidential issues + - Ability to lock file or folder in the repository + - Fix: Git hooks don't fire when committing from the UI + +## 8.8.9 + + - No EE-specific changes + +## 8.8.8 + + - No EE-specific changes + +## 8.8.7 + + - No EE-specific changes + +## 8.8.6 + + - [Elastic] Fix visibility of snippets when searching. + +## 8.8.5 + + - Make sure OAuth routes that we generate for Geo matches with the ones in Rails routes !444 + +## 8.8.4 + + - Remove license overusage message + +## 8.8.3 + + - Add standard web hook headers to Jenkins CI post. !374 + - Gracefully handle malformed DNs in LDAP group sync. !392 + - Reduce load on DB for license upgrade check. !421 + - Make it clear the license overusage message is visible only to admins. !423 + - Fix Git hook validations for fast-forward merges. !427 + - [Elastic] In search results, only show notes on confidential issues that the user has access to. + +## 8.8.2 + + - Fix repository mirror updates for new imports stuck in started + - [Elastic] Search through the filenames. !409 + - Fix repository mirror updates for new imports stuck in "started" state. !416 + +## 8.8.1 + + - No EE-specific changes + +## 8.8.0 (2016-05-22) + + - [Elastic] Database indexer prints its status + - [Elastic][Fix] Database indexer skips projects with invalid HEAD reference + - Fix skipping pages when restoring backups + - Add EE license via API !400 + - [Elastic] More efficient snippets search + - [Elastic] Add rake task for removing all indexes + - [Elastic] Add rake task for clearing indexing status + - [Elastic] Improve code search + - [Elastic] Fix encoding issues during indexing + - Warn admin if current active count exceeds license + - [Elastic] Search through the filenames + - Set KRB5 as default clone protocol when Kerberos is enabled and user is logged in (Borja Aparicio) + - Add support for Admin Groups to SAML + - Reduce emails-on-push HTML size by using a simple monospace font + - API requests to /internal/authorized_keys are now tagged properly + - Geo: Single Sign Out support !380 + +## 8.7.9 + + - No EE-specific changes + +## 8.7.8 + + - [Elastic] Fix visibility of snippets when searching. + +## 8.7.7 + + - No EE-specific changes + +## 8.7.6 + + - Bump GitLab Pages to 0.2.4 to fix Content-Type for predefined 404 + +## 8.7.5 + + - No EE-specific changes + +## 8.7.4 + + - Delete ProjectImportData record only if Project is not a mirror !370 + - Fixed typo in GitLab GEO license check alert !379 + - Fix LDAP access level spillover bug !499 + +## 8.7.3 + + - No EE-specific changes + +## 8.7.2 + + - Fix MR notifications for slack and hipchat when approvals are fullfiled. !325 + - GitLab Geo: Merge requests on Secondary should not check mergeable status + +## 8.7.1 + + - No EE-specific changes + +## 8.7.0 (2016-04-22) + + - Update GitLab Pages to 0.2.1: support user-defined 404 pages + - Refactor group sync to pull access level logic to its own class. !306 + - [Elastic] Stabilize database indexer if database is inconsistent + - Add ability to sync to remote mirrors. !249 + - GitLab Geo: Many replication improvements and fixes !354 + +## 8.6.9 + + - No EE-specific changes + +## 8.6.8 + + - No EE-specific changes + +## 8.6.7 + + - No EE-specific changes + +## 8.6.6 + + - Concat AD group recursive member results with regular member results. !333 + - Fix LDAP group sync regression for groups with member value `uid=`. !335 + - Don't attempt to include too large diffs in e-mail-on-push messages (Stan Hu). !338 + +## 8.6.5 + + - No EE-specific changes + +## 8.6.4 + + - No EE-specific changes + +## 8.6.3 + + - Fix other cases where git hooks would fail due to old commits. !310 + - Exit ElasticIndexerWorker's job happily if record cannot be found. !311 + - Fix "Reload with full diff" button not working (Stan Hu). !313 + +## 8.6.2 + + - Fix old commits triggering git hooks on new branches branched off another branch. !281 + - Fix issue with deleted user in audit event (Stan Hu). !284 + - Mark pending todos as done when approving a merge request. !292 + - GitLab Geo: Display Attachments from Primary node. !302 + +## 8.6.1 + + - Only rename the `light_logo` column in the `appearances` table if its not there yet. !290 + - Fix diffs in text part of email-on-push messages (Stan Hu). !293 + - Fix an issue with methods not accessible in some controllers. !295 + - Ensure Projects::ApproversController inherits from Projects::ApplicationController. !296 + +## 8.6.0 (2016-03-22) + + - Handle duplicate appearances table creation issue with upgrade from CE to EE + - Add confidential issues + - Improve weight filter for issues + - Update settings and documentation for per-install LDAP sync time + - Fire merge request webhooks when a merge request is approved + - Add full diff highlighting to Email on push + - Clear "stuck" mirror updates before periodically updating all mirrors + - LDAP: Don't render Linked LDAP groups forms when LDAP is disabled + - [Elastic] Add elastic checker to gitlab:check + - [Elastic] Added UPDATE_INDEX option to rake task + - [Elastic] Removing repository and wiki index after removing project + - [Elastic] Update index on push to wiki + - [Elastic] Use subprocesses for ElasticSearch index jobs + - [Elastic] More accurate as_indexed_json (More stable database indexer) + - [Elastic] Fix: Don't index newly created system messages and awards + - [Elastic] Fixed exception on branch removing + - [Elastic] Fix bin/elastic_repo_indexer to follow config + - GitLab Geo: OAuth authentication + - GitLab Geo: Wiki synchronization + - GitLab Geo: ReadOnly Middleware improvements + - GitLab Geo: SSH Keys synchronization + - Allow SSL verification to be configurable when importing GitHub projects + - Disable git-hooks for git annex commits + +## 8.5.13 + + - No EE-specific changes + +## 8.5.12 + + - No EE-specific changes + +## 8.5.11 + + - Fix vulnerability that made it possible to enumerate private projects belonging to group + +## 8.5.10 + + - No EE-specific changes + +## 8.5.9 + + - No EE-specific changes + +## 8.5.8 + + - GitLab Geo: Documentation + +## 8.5.7 + + - No EE-specific changes + +## 8.5.6 + + - No EE-specific changes + +## 8.5.5 + + - GitLab Geo: Repository synchronization between primary and secondary nodes + - Add documentation for GitLab Pages + - Fix importing projects from GitHub Enterprise Edition + - Fix syntax error in init file + - Only show group member roles if explicitly requested + - GitLab Geo: Improve GeoNodes Admin screen + - GitLab Geo: Avoid locking yourself out when adding a GeoNode + +## 8.5.4 + + - [Elastic][Security] Notes exposure + +## 8.5.3 + + - Prevent LDAP from downgrading a group's last owner + - Update gitlab-elastic-search gem to 0.0.11 + +## 8.5.2 + + - Update LDAP groups asynchronously + - Fix an issue when weight text was displayed in Issuable collapsed sidebar +## 8.5.2 + + - Fix importing projects from GitHub Enterprise Edition. + +## 8.5.1 + + - Fix adding pages domain to projects in groups + +## 8.5.0 (2016-02-22) + + - Fix Elasticsearch blob results linking to the wrong reference ID (Stan Hu) + - Show warning when mirror repository default branch could not be updated because it has diverged from upstream. + - More reliable wiki indexer + - GitLab Pages gets support for custom domain and custom certificate + - Fix of Elastic indexer. It should not trigger record validation for projects + - Fix of Elastic indexer. Stabilze indexer when serialized data is corrupted + - [Elastic] Don't index unnecessary data into elastic + +## 8.4.11 + + - No EE-specific changes + +## 8.4.10 + + - No EE-specific changes + +## 8.4.9 + + - Fix vulnerability that made it possible to enumerate private projects belonging to group + +## 8.4.8 + + - No EE-specific changes + +## 8.4.7 + + - No EE-specific changes + +## 8.4.6 + + - No EE-specific changes + +## 8.4.5 + + - Update LDAP groups asynchronously + +## 8.4.4 + + - Re-introduce "Send email to users" link in Admin area + - Fix category values for Jenkins and JenkinsDeprecated services + - Fix Elasticsearch indexing for newly added snippets + - Make Elasticsearch indexer more stable + - Update gitlab-elasticsearch-git to 0.0.10 which contain a few important fixes + +## 8.4.3 + + - Elasticsearch: fix partial blob indexing on push + - Elasticsearch: added advanced indexer for repositories + - Fix Mirror User dropdown + +## 8.4.2 + + - Elasticsearch indexer performance improvements + - Don't redirect away from Mirror Repository settings when repo is empty + - Fix updating of branches in mirrored repository + - Fix a 500 error preventing LDAP users with 2FA enabled from logging in + - Rake task gitlab:elastic:index_repositories handles errors and shows progress + - Partial indexing of repo on push (indexing changes only) + +## 8.4.1 + + - No EE-specific changes + +## 8.4.0 (2016-01-22) + + - Add ability to create a note for user by admin + - Fix "Commit was rejected by git hook", when max_file_size was set null in project's Git hooks + - Fix "Approvals are not reset after a new push is made if the request is coming from a fork" + - Fix "User is not automatically removed from suggested approvers list if user is deleted" + - Add option to enforce a semi-linear history by only allowing merge requests to be merged that have been rebased + - Add option to trigger builds when branches or tags are updated from a mirrored upstream repository + - Ability to use Elasticsearch as a search engine + +## 8.3.10 + + - No EE-specific changes + +## 8.3.9 + + - No EE-specific changes + +## 8.3.8 + + - Fix vulnerability that made it possible to enumerate private projects belonging to group + +## 8.3.7 + + - No EE-specific changes + +## 8.3.6 + + - No EE-specific changes + +## 8.3.5 + + - No EE-specific changes + +## 8.3.4 + + - No EE-specific changes + +## 8.3.3 + + - Fix undefined method call in Jenkins integration service + +## 8.3.2 + + - No EE-specific changes + +## 8.3.1 + + - Rename "Group Statistics" to "Contribution Analytics" + +## 8.3.0 (2015-12-22) + + - License information can now be retrieved via the API + - Show Kerberos clone url when Kerberos enabled and url different than HTTP url (Borja Aparicio) + - Fix bug with negative approvals required + - Add group contribution analytics page + - Add GitLab Pages + - Add group contribution statistics page + - Automatically import Kerberos identities from Active Directory when Kerberos is enabled (Alex Lossent) + - Canonicalization of Kerberos identities to always include realm (Alex Lossent) + +## 8.2.6 + + - No EE-specific changes + +## 8.2.5 + + - No EE-specific changes + +## 8.2.4 + + - No EE-specific changes + +## 8.2.3 + + - No EE-specific changes + +## 8.2.2 + + - Fix 404 in redirection after removing a project (Stan Hu) + - Ensure cached application settings are refreshed at startup (Stan Hu) + - Fix Error 500 when viewing user's personal projects from admin page (Stan Hu) + - Fix: Raw private snippets access workflow + - Prevent "413 Request entity too large" errors when pushing large files with LFS + - Ensure GitLab fires custom update hooks after commit via UI + +## 8.2.1 + + - Forcefully update builds that didn't want to update with state machine + - Fix: saving GitLabCiService as Admin Template + +## 8.2.0 (2015-11-22) + + - Invalidate stored jira password if the endpoint URL is changed + - Fix: Page is not reloaded periodically to check if rebase is finished + - When someone as marked as a required approver for a merge request, an email should be sent + - Allow configuring the Jira API path (Alex Lossent) + - Fix "Rebase onto master" + - Ensure a comment is properly recorded in JIRA when a merge request is accepted + - Allow groups to appear in the `Share with group` share if the group owner allows it + - Add option to mirror an upstream repository. + +## 8.1.4 + + - Fix bug in JIRA integration which prevented merge requests from being accepted when using issue closing pattern + +## 8.1.3 + + - Fix "Rebase onto master" + +## 8.1.2 + + - Prevent a 500 error related to the JIRA external issue tracker service + +## 8.1.1 + + - Removed, see 8.1.2 + +## 8.1.0 (2015-10-22) + + - Add documentation for "Share project with group" API call + - Added an issues template (Hannes Rosenögger) + - Add documentation for "Share project with group" API call + - Ability to disable 'Share with Group' feature (via UI and API) + +## 8.0.6 + + - No EE-specific changes + +## 8.0.5 + + - "Multi-project" and "Treat unstable builds as passing" parameters for + the Jenkins CI service are now correctly persisted. + - Correct the build URL when "Multi-project" is enabled for the Jenkins CI + service. + +## 8.0.4 + + - Fix multi-project setup for Jenkins + +## 8.0.3 + + - No EE-specific changes + +## 8.0.2 + + - No EE-specific changes + +## 8.0.1 + + - Correct gem dependency versions + - Re-add the "Help Text" feature that was inadvertently removed + +## 8.0.0 (2015-09-22) + + - Fix navigation issue when viewing Group Settings pages + - Guests and Reporters can approve merge request as well + - Add fast-forward merge option in project settings + - Separate rebase & fast-forward merge features + +## 7.14.3 + + - No changes + +## 7.14.2 + + - Fix the rebase before merge feature + +## 7.14.1 + + - Fix sign in form when just Kerberos is enabled + +## 7.14.0 (2015-08-22) + + - Disable adding, updating and removing members from a group that is synced with LDAP + - Don't send "Added to group" notifications when group is LDAP synched + - Fix importing projects from GitHub Enterprise Edition. + - Automatic approver suggestions (based on an authority of the code) + - Add support for Jenkins unstable status + - Automatic approver suggestions (based on an authority of the code) + - Support Kerberos ticket-based authentication for Git HTTP access + +## 7.13.3 + + - Merge community edition changes for version 7.13.3 + - Improved validation for an approver + - Don't resend admin email to everyone if one delivery fails + - Added migration for removing of invalid approvers + +## 7.13.2 + + - Fix group web hook + - Don't resend admin email to everyone if one delivery fails + +## 7.13.1 + + - Merge community edition changes for version 7.13.1 + - Fix: "Rebase before merge" doesn't work when source branch is in the same project + +## 7.13.0 (2015-07-22) + + - Fix git hook validation on initial push to master branch. + - Reset approvals on push + - Fix 500 error when the source project of an MR is deleted + - Ability to define merge request approvers + +## 7.12.2 + + - Fixed the alignment of project settings icons + +## 7.12.1 + + - No changes specific to EE + +## 7.12.0 (2015-06-22) + + - Fix error when viewing merge request with a commit that includes "Closes #". + - Enhance LDAP group synchronization to check also for member attributes that only contain "uid=" + - Enhance LDAP group synchronization to check also for submember attributes + - Prevent LDAP group sync from removing a group's last owner + - Add Git hook to validate maximum file size. + - Project setting: approve merge request by N users before accept + - Support automatic branch jobs created by Jenkins in CI Status + - Add API support for adding and removing LDAP group links + +## 7.11.4 + + - no changes specific to EE + +## 7.11.3 + + - Fixed an issue with git annex + +## 7.11.2 + + - Fixed license upload and verification mechanism + +## 7.11.0 (2015-05-22) + + - Skip git hooks commit validation when pushing new tag. + - Add Two-factor authentication (2FA) for LDAP logins + +## 7.10.1 + + - Check if comment exists in Jira before sending a reference + +## 7.10.0 (2015-04-22) + + - Improve UI for next pages: Group LDAP sync, Project git hooks, Project share with groups, Admin -> Appearance settigns + - Default git hooks for new projects + - Fix LDAP group links page by using new group members route. + - Skip email confirmation when updated via LDAP. + +## 7.9.0 (2015-03-22) + + - Strip prefixes and suffixes from synced SSH keys: + `SSHKey:ssh-rsa keykeykey` and `ssh-rsa keykeykey (SSH key)` will now work + - Check if LDAP admin group exists before querying for user membership + - Use one custom header logo for all GitLab themes in appearance settings + - Escape wildcards when searching LDAP by group name. + - Group level Web Hooks + - Don't allow project to be shared with the group it is already in. + +## 7.8.0 (2015-02-22) + + - Improved Jira issue closing integration + - Improved message logging for Jira integration + - Added option of referencing JIRA issues from GitLab + - Update Sidetiq to 0.6.3 + - Added Github Enterprise importer + - When project has MR rebase enabled, MR will have rebase checkbox selected by default + - Minor UI fixes for sidebar navigation + - Manage large binaries with git annex + +## 7.7.0 (2015-01-22) + + - Added custom header logo support (Drew Blessing) + - Fixed preview appearance bug + - Improve performance for selectboxes: project share page, admin email users page + +## 7.6.2 + + - Fix failing migrations for MySQL, LDAP + +## 7.6.1 + + - No changes + +## 7.6.0 (2014-12-22) + + - Added Audit events related to membership changes for groups and projects + - Added option to attempt a rebase before merging merge request + - Dont show LDAP groups settings if LDAP disabled + - Added member lock for groups to disallow membership additions on project level + - Rebase on merge request. Introduced merge request option to rebase before merging + - Better message for failed pushes because of git hooks + - Kerberos support for web interface and git HTTP + +## 7.5.3 + + - Only set up Sidetiq from a Sidekiq server process (fixes Redis::InheritedError) + +## 7.5.0 (2014-11-22) + + - Added an ability to check each author commit's email by regex + - Added an ability to restrict commit authors to existing GitLab users + - Add an option for automatic daily LDAP user sync + - Added git hook for preventing tag removal to API + - Added git hook for setting commit message regex to API + - Added an ability to block commits with certain filenames by regex expression + - Improved a jenkins parser + +## 7.4.4 + + - Fix broken ldap migration + +## 7.4.0 (2014-10-22) + + - Support for multiple LDAP servers + - Skip AD specific LDAP checks + - Do not show ldap users in dropdowns for groups with enabled ldap-sync + - Update the JIRA integration documentation + - Reset the homepage to show the GitLab logo by deleting the custom logo. + +## 7.3.0 (2014-09-22) + + - Add an option to change the LDAP sync time from default 1 hour + - User will receive an email when unsubscribed from admin notifications + - Show group sharing members on /my/project/team + - Improve explanation of the LDAP permission reset + - Fix some navigation issues + - Added support for multiple LDAP groups per GitLab group + +## 7.2.0 (2014-08-22) + + - Improve Redmine integration + - Better logging for the JIRA issue closing service + - Administrators can now send email to all users through the admin interface + - JIRA issue transition ID is now customizable + - LDAP group settings are now visible in admin group show page and group members page + +## 7.1.0 (2014-07-22) + + - Synchronize LDAP-enabled GitLab administrators with an LDAP group (Marvin Frick, sponsored by SinnerSchrader) + - Synchronize SSH keys with LDAP (Oleg Girko (Jolla) and Marvin Frick (SinnerSchrader)) + - Support Jenkins jobs with multiple modules (Marvin Frick, sponsored by SinnerSchrader) + +## 7.0.0 (2014-06-22) + + - Fix: empty brand images are displayed as empty image_tag on login page (Marvin Frick, sponsored by SinnerSchrader) + +## 6.9.4 + + - Fix bug in JIRA Issue closing triggered by commit messages + - Fix JIRA issue reference bug + +## 6.9.3 + + - Fix check CI status only when CI service is enabled(Daniel Aquino) + +## 6.9.2 + + - Merge community edition changes for version 6.9.2 + +## 6.9.1 + + - Merge community edition changes for version 6.9.1 + +## 6.9.0 (2014-05-22) + + - Add support for closing Jira tickets with commits and MR + - Template for Merge Request description can be added in project settings + - Jenkins CI service + - Fix LDAP email upper case bug + +## 6.8.0 (2014-04-22) + + - Customise sign-in page with custom text and logo + +## 6.7.1 + + - Handle LDAP errors in Adapter#dn_matches_filter? + +## 6.7.0 (2014-03-22) + + - Improve LDAP sign-in speed by reusing connections + - Add support for Active Directory nested LDAP groups + - Git hooks: Commit message regex + - Git hooks: Deny git tag removal + - Fix group edit in admin area + +## 6.6.0 (2014-02-22) + + - Permission reset button for LDAP groups + - Better performance with large numbers of users with access to one project + +## 6.5.0 (2014-01-22) + + - Add reset permissions button to Group#members page + +## 6.4.0 (2013-12-22) + + - Respect existing group permissions during sync with LDAP group (d3844662ec7ce816b0a85c8b40f66ee6c5ae90a1) + +## 6.3.0 (2013-11-22) + + - When looking up a user by DN, use single scope (bc8a875df1609728f1c7674abef46c01168a0d20) + - Try sAMAccountName if omniauth nickname is nil (9b7174c333fa07c44cc53b80459a115ef1856e38) + +## 6.2.0 (2013-10-22) + + - API: expose ldap_cn and ldap_access group attributes + - Use omniauth-ldap nickname attribute as GitLab username + - Improve group sharing UI for installation with many groups + - Fix empty LDAP group raises exception + - Respect LDAP user filter for git access diff --git a/CHANGELOG.md b/CHANGELOG.md index e379c23ee3cfe82745ea1b73b226a23cc4f5c8e9..c2ffec09cb223aedf777d3cd57ce1347240546f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,320 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 12.3.2 + +### Security (12 changes) + +- Fix Gitaly SearchBlobs flag RPC injection. +- Add a policy check for system notes that may not be visible due to cross references to private items. +- Display only participants that user has permission to see on milestone page. +- Do not disclose project milestones on group milestones page when project milestones access is disabled in project settings. +- Check permissions before showing head pipeline blocking merge requests. +- Fix new project path being disclosed through unsubscribe link of issue/merge requests. +- Prevent bypassing email verification using Salesforce. +- Do not show resource label events referencing not accessible labels. +- Cancel all running CI jobs triggered by the user who is just blocked. +- Fix Gitaly SearchBlobs flag RPC injection. +- Only render fixed number of mermaid blocks. +- Prevent GitLab accounts takeover if SAML is configured. + + +## 12.3.1 + +### Fixed (4 changes) + +- Fix ordering of issue board lists not being persisted. !17356 +- Fix error when duplicate users are merged in approvers list. !17406 +- Fix bug that caused a merge to show an error message. !17466 +- Fix CSS leak in job log. + + +## 12.3.0 + +### Security (23 changes) + +- Filter out old system notes for epics in notes api endpoint response. +- Fix SSRF via DNS rebinding in Kubernetes Integration. +- Fix project import restricted visibility bypass via API. +- Prevent disclosure of merge request ID via email. +- Use admin_group authorization in Groups::RunnersController. +- Gitaly: ignore git redirects. +- Prevent DNS rebind on JIRA service integration. +- Make sure HTML text is always escaped when replacing label/milestone references. +- Fix HTML injection for label description. +- Avoid exposing unaccessible repo data upon GFM post processing. +- Remove EXIF from users/personal snippet uploads. +- Fix weak session management by clearing password reset tokens after login (username/email) are updated. +- Added image proxy to mitigate potential stealing of IP addresses. +- Restrict MergeRequests#test_reports to authenticated users with read-access on Builds. +- Ensure only authorised users can create notes on Merge Requests and Issues. +- Send TODOs for comments on commits correctly. +- Check permissions before responding in MergeController#pipeline_status. +- Limit the size of issuable description and comments. +- Enforce max chars and max render time in markdown math. +- Speed up regexp in namespace format by failing fast after reaching maximum namespace depth. +- Add :login_recaptcha_protection_enabled setting to prevent bots from brute-force attacks. +- Upgrade pages to 1.8.1. +- Show cross-referenced MR-id in issues' activities only to authorized users. + +### Removed (1 change) + +- Removed redundant index on releases table. !31487 + +### Fixed (78 changes, 25 of them are from the community) + +- Avoid Devise "401 Unauthorized" responses. !16519 +- Allow close status to be shown on locked issues. !16685 +- Changed todo/done quick actions to work not only for first usage. !16837 (Marc Schwede) +- Adds missing error handling. !16896 (toptalo) +- Prevent the user from seeing an invalid "Purchase more minutes" prompt. !16979 +- Fix missing board lists when other users collapse / expand the list. !17318 +- Uses projects_authorizations.access_level in MembersFinder. !28887 (Jacopo Beschi @jacopo-beschi) +- Let project reporters create issue from group boards. !29866 +- Remove margin from user header. !30878 (lucyfox) +- Improve application settings API. !31149 (Mathieu Parent) +- Fix encoding of special characters in "Find File". !31311 (Jan Beckmann) +- Avoid conflicts between ArchiveTracesCronWorker and ArchiveTraceWorker. !31376 +- Disable "Transfer group" button when no group is selected. !31387 (Jan Beckmann) +- Prevent archived projects from showing up in global search. !31498 (David Palubin) +- Fixed embeded metrics tooltip inconsistent styling. !31517 +- Fix 500 errors caused by pattern matching with variables in CI Lint. !31719 +- Fixed removing directories in Web IDE. !31727 +- All of discussion expand/collapse button is clickable. !31730 +- Only show /copy_metadata quick action when usable. !31735 (Lee Tickett) +- Read pipelines from public projects through API without an access token. !31816 +- fix charts scroll handle icon to use gitlab svg. !31825 +- Remove "Commit" from pipeline status tooltips. !31861 +- Fix top-nav search bar dropdown on xl displays. !31864 (Kemais Ehlers) +- Fix loading icon causing text to jump in file row of Web IDE. !31884 +- Fix MR reports section loading icon alignment. !31897 +- Fix broken git clone box on wiki git access page. !31898 +- Exempt user gitlab-ci-token from rate limiting. !31909 +- Fix search preserving space when change branch. !31973 (minghuan lei) +- Fix file header style and position during scroll in a merge conflict resolution. !31991 +- Allow latency measurements of sidekiq jobs taking > 2.5s. !32001 +- Return correct user for manual deployments. !32004 +- Fix style of secondary profile tab buttons. !32010 (Wolfgang Faust) +- Fix serverless entry page layout. !32029 +- Fix HTML rendering for fast-forward rebases in merge request widget. !32032 +- Update the timestamp in Operations > Environments to show correct deployment date for manual deploy jobs. !32072 +- Fix dropdowns closing when click is released outside the dropdown. !32084 +- Hide duplicate board list while dragging. !32099 +- Don't check external authorization when disabling the service. !32102 (Robert Schilling) +- Makes custom Pages domain open as external link in new tab. !32130 (jakeburden) +- Change default visibility level for FogBugz imported projects to Private. !32142 +- Move visual review toolbar code to NPM. !32159 +- Fix parsing of months in time tracking commands. !32165 +- Wrong format on MS teams integration push events with multi line commit messages. !32180 (Massimeddu Cireddu) +- Guard against deleted project feature entry in project permissions. !32187 +- Fix ref switcher separators from conflicting with branch names. !32198 +- Fix performance bar on Puma. !32213 +- Remove token field from runners edit form. !32231 +- Fix 500 error in CI lint when included templates are an array. !32232 +- Fix users cannot access job detail page when deployable does not exist. !32247 +- Do not translate system notes into author's language. !32264 +- Fix moving issues API failing when text includes commit URLs. !32317 +- Fix issue due notification emails not being threaded correctly. !32325 +- Allow project feature permissions to be overridden during import with override_params. !32348 +- Handle invalid mirror url. !32353 (Lee Tickett) +- New project milestone primary button. !32355 (Lee Tickett) +- Display `more information` docs link on error tracking page when users do not have permissions to enable that feature. !32365 (Romain Maneschi) +- Quick action label must be first in issue comment. !32367 (Romain Maneschi) +- Fix for missing avatar images dislpayed in commit trailers. !32374 (Jesse Hall @jessehall3) +- Make it harder to delete issuables accidentally. !32376 +- Replaced vue resource to axios in the Markdown field preview component. !32386 (Prakash Chokalingam @prakash_Chokalingam) +- Fix create MR from issue using a tag as ref. !32392 (Jacopo Beschi @jacopo-beschi) +- Add X-GitLab-NotificationReason header to note emails. !32422 +- Expand textarea for CA cert in cluster form. !32508 +- Prevent empty external authorization classification labels from overriding the default label. !32517 (Will Chandler) +- Allow not resolvable urls when dns rebind protection is disabled. !32523 +- Avoid checking dns rebind protection when validating. !32577 +- Passing job rules downstream and E2E specs for job:rules configuration. !32609 +- Quote branch names in how to merge instructions. !32639 (Lee Tickett) +- Fix removal of install pods. !32667 +- Fix sharing localStorage with all MRs. !32699 +- Default the asset proxy whitelist to the installation domain. !32703 +- Add some padding to details markdown element. !32716 +- Use `ChronicDuration` in a thread-safe way. !32817 +- Fix watch button styling and notifications buttons consistency. !32827 +- Fix encoding error in MR diffs when using external diffs. !32862 (Hiroyuki Sato) +- Add bottom margin to snippet title. !32877 +- Bump markdown cache version to fix any incorrect links from asset proxy defaults. +- Persist `needs:` validation as config error. + +### Changed (39 changes, 6 of them are from the community) + +- Extend pipeline graph scroll area to full width. !14870 +- Frontend support for saving issue board preferences on the current user. !16421 +- Switch Milestone and Release to a many-to-many relationship. !16517 +- Align project selector search box better with design system. !16795 +- Adds the runners_token of the group if the user that requests the group info is admin of it. !16831 (Ignacio Lorenzo Subirá Otal nachootal@gmail.com) +- Upgrade to Gitaly v1.65.0. !17135 +- Make flash notifications sticky. !30141 +- Add Issue and Merge Request titles to Todo items. !30435 (Arun Kumar Mohan) +- Remove wiki page slug dialog step when creating wiki page. !31362 +- Improve system notes for Zoom links. !31410 (Jacopo Beschi @jacopo-beschi) +- Updated WebIDE default commit options. !31449 +- Remove oauth form from GitHub CI/CD only import authentication. !31488 +- Update assignee (cannot merge) style. !31545 +- Updated latest pipeline tag tooltip to be more descriptive. !31624 +- Add optional label_id parameter to label API for PUT and DELETE. !31804 +- Updates issues REST API to allow extended sort options. !31849 +- Fix to show renamed file in mr. !31888 +- Replaced expand diff icons. !31907 +- Upgrade to Gitaly 1.60.0. !31981 +- Make MR pipeline widget text more descriptive. !32025 +- Fix wording on milestone due date when milestone is due today. !32096 +- Improve search result labels. !32101 +- Limit access request emails to ten most recently active owners or maintainers. !32141 +- Improve chatops help output. !32208 +- Update merge train documentation. !32218 +- Add caret icons to the monitoring dashboard. !32239 +- Install cert-manager v0.9.1. !32243 +- Bring text mail for new issue & MR more in line. !32254 +- Add cluster domain warning. !32260 +- Rename epic column state to state_id. !32270 +- Use moved instead of closed in issue references. !32277 (juliette-derancourt) +- Standardize use of `content` parameter in snippets API. !32296 +- Show meaningful message on /due quick action with invalid date. !32349 (Jacopo Beschi @jacopo-beschi) +- Remove dynamically constructed feature flags starting with prometheus_transaction_. !32395 (Jacopo Beschi @jacopo-beschi) +- Indicate on Issue Status if an Issue was Duplicated. !32472 +- Avoid dns rebinding checks when the domain is whitelisted. !32603 +- Upgrade to Gitaly v1.62.0. !32608 +- Unified presentation of the filter input field for projects listings. !32706 +- Hide resolve thread button from guest. !32859 + +### Performance (20 changes) + +- Lower search counters. !11777 +- Considerably improve the query performance for MR discussions load. !16635 +- Eliminate Gitaly N+1 queries with notes API. !32089 +- Optimise UpdateBuildQueueService. !32095 +- Remove N+1 SQL query loading project feature in dashboard. !32169 +- Reduce the number of SQL requests on MR-show. !32192 +- Makes LFS object linker process OIDs in batches. !32268 +- Preload routes information to fix N+1 issue. !32352 +- Reduce N+1 when doing project export. !32423 +- Skip requesting diverging commit counts if no branches are listed. !32496 +- Support selective highlighting of lines. !32514 +- Replace indexes for counting active users. !32538 +- Create partial index for gitlab-monitor CI metrics. !32546 +- Optimize queries for snippet listings. !32576 +- Preprocess wiki attachments with GitLab-Workhorse. !32663 +- Create index for users.unconfirmed_email. !32664 +- Optimize /admin/applications so that it does not timeout. !32852 +- Replace events index with partial one. !32874 +- Partial index for namespaces.type. !32876 +- Fix member expiration not always working. !32951 + +### Added (42 changes, 10 of them are from the community) + +- Enable modsecurity in nginx-ingress apps. !15774 +- Database table for tracking programming language trends over time. !16491 +- Add DAST full scan domain validation. !16680 +- Add not param to Issues API endpoint. !16748 +- Allow specifying timeout per-job in .gitlab-ci.yml. !16777 (Michał Siwek) +- Document forwarding CI variables to docker build in Auto DevOps. !16783 +- Add links for latest pipelines. !20865 (Alex Ives) +- New interruptible attribute for CI/CD jobs. !23464 (Cédric Tabin) +- API: Promote project labels to group labels. !25218 (Robert Schilling) +- Introduced Build::Rules configuration for Ci::Build. !29011 +- Notification emails can be signed with SMIME. !30644 (Diego Louzán) +- Allow milestones to be associated with a release (backend). !30816 +- Enable serving static objects from an external storage. !31025 +- Save collapsed option for board lists in database. !31069 +- Apply quickactions when modifying comments. !31136 +- Add SwaggerUI Pages template for .gitlab-ci.yml. !31183 (mdhtr) +- Add ability to see project deployments at cluster level (FE). !31575 +- Create component to display area and line charts in monitor dashboards. !31639 +- Add persistance to last choice of projects sorting on projects dashboard page. !31669 +- Run Pipeline button & API for MR Pipelines. !31722 +- Add service to transfer Group Milestones when transferring a Project. !31778 +- Allow $CI_REGISTRY_USER to delete tags. !31796 +- Support adding and removing labels w/ push opts. !31831 +- Enable line charts in dashbaord panels and embedded charts. !31920 +- Add First and Last name columns to User model. !31985 +- Add option to allow OAuth providers to bypass two factor. !31996 (Dodocat) +- Expose namespace storage statistics with GraphQL. !32012 +- Add usage pings for merge request creating. !32059 +- Add warning about initial deployment delay for GitLab Pages sites. !32122 +- Allow Knative to be installed on group and instance level clusters. !32128 +- Add a close issue slack slash command. !32150 +- Support chat notifications to be fired for protected branches. !32176 +- Add system hooks for project/group membership updates. !32371 (Brandon Williams) +- Add source and merge_request fields to pipeline event webhook. !32373 (Bian Jiaping) +- Allow ECDSA certificates for pages domains. !32393 +- Show link to cluster used on job page. !32446 +- Group level JupyterHub. !32512 +- Creates utility parser for the job log. !32555 +- Expose update project service endpoint JSON. !32759 +- Expose 'protected' field for Tag API endpoint. !32790 (Andrea Leone) +- Create table `alerts_service_data`. !32860 +- Creates base components for the new job log. + +### Other (42 changes, 13 of them are from the community) + +- Setting NOT NULL constraint to users.private_profile column. !14838 +- Schedule productivity analytics recalculation for EE. !15137 +- Document Lambda deploys via GitLab CI/CD. !16858 +- Add Redis interceptor tracing. !30238 +- Encrypt existing and new deploy tokens. !30679 +- Clean up keyboard shortcuts help modal, removing and adding as needed. !31642 +- Add warning to pages domains that obtaining/deploying SSL certificates through Let's Encrypt can take some time. !31765 +- Add new API method in Api.js: projectUsers. !31801 +- Upgrade babel to 7.5.5. !31819 (Takuya Noguchi) +- Update docs to reflect the rename of gitlab-monitor to gitlab-exporter. !31901 +- Count comments on commits and merge requests. !31912 +- Resolve Badge counter: Very low contrast between foreground and background colors. !31922 +- Add index to improve group cluster deployments query performance. !31988 +- Replace finished_at with deployed_at for the internal API Deployment entity. !32000 +- Update to GitLab Shell v9.4.0. !32009 +- Default clusters namespace_per_environment column to true. !32139 +- Remove deprecation message for milestone tabs. !32252 +- Refactored Karma spec to Jest for mr_widget_auto_merge_failed. !32282 (Illya Klymov) +- Update GitLab Runner Helm Chart to 0.8.0. !32289 +- Refactor showStagedIcon property to reflect the behavior its name represents. !32333 (Arun Kumar Mohan) +- Upgrade pages to 1.8.0. !32334 +- Change prioritized labels empty state message. !32338 (Lee Tickett) +- make test of note app with comments disabled dry. !32383 (Romain Maneschi) +- Use new location for gitlab-runner helm charts. !32384 +- Mention in docs how to disable project snippets. !32391 (Jacopo Beschi @jacopo-beschi) +- delete animation width on global search input. !32399 (Romain Maneschi) +- Remove vue resource from sidebar service. !32400 (Lee Tickett) +- Remove vue resource from issue. !32421 (Lee Tickett) +- Remove vue resource from remove issue. !32425 (Lee Tickett) +- Remove vue-resource from PerformanceBarService. !32428 (Lee Tickett) +- Added warning note on the project container registry setting informing users that the registry is public for public projects. !32447 +- Admin dashboard: Fetch and render statistics async. !32449 +- Update GitLab Workhorse to v8.10.0. !32501 +- Remove Users.support_bot column. !32554 +- Add padding to left of "Sort by" in members dropdown. !32602 +- Log errors for failed pipeline creation in PostReceive. !32633 +- Avoid prefilling target branch when source branch is the default one. !32701 +- Bump Kubeclient to 4.4.0. !32811 +- Remove vue-resource from notes service. !32934 (Lee Tickett) +- Added board name to page title in boards view. +- Remove vue resource from group service. (Lee Tickett) +- Updates tooltip of 'detached' label/state. + + +## 12.2.6 + +### Security (11 changes) + +- Add a policy check for system notes that may not be visible due to cross references to private items. +- Display only participants that user has permission to see on milestone page. +- Do not disclose project milestones on group milestones page when project milestones access is disabled in project settings. +- Check permissions before showing head pipeline blocking merge requests. +- Fix new project path being disclosed through unsubscribe link of issue/merge requests. +- Prevent bypassing email verification using Salesforce. +- Do not show resource label events referencing not accessible labels. +- Cancel all running CI jobs triggered by the user who is just blocked. +- Fix Gitaly SearchBlobs flag RPC injection [Gitaly v1.59.3]. +- Only render fixed number of mermaid blocks. +- Prevent GitLab accounts takeover if SAML is configured. + + ## 12.2.5 ### Security (1 change) @@ -28,6 +342,10 @@ entry. ## 12.2.3 +- No changes. + +## 12.2.2 + ### Security (22 changes) - Ensure only authorised users can create notes on Merge Requests and Issues. @@ -54,11 +372,16 @@ entry. - Fix SSRF via DNS rebinding in Kubernetes Integration. -## 12.2.2 +## 12.2.1 -- Unreleased due to QA failure. +### Fixed (2 changes) -## 12.2.1 +- Fix for embedded metrics undefined params. !31975 +- Fix "ERR value is not an integer or out of range" errors. !32126 + +### Performance (1 change) + +- Fix Gitaly N+1 calls with listing issues/MRs via API. !31938 ### Fixed (3 changes) @@ -311,6 +634,28 @@ entry. - Update Packer.gitlab-ci.yml to use latest image. (Kelly Hair) +## 12.1.12 + +### Security (12 changes) + +- Add a policy check for system notes that may not be visible due to cross references to private items. +- Display only participants that user has permission to see on milestone page. +- Do not disclose project milestones on group milestones page when project milestones access is disabled in project settings. +- Check permissions before showing head pipeline blocking merge requests. +- Fix new project path being disclosed through unsubscribe link of issue/merge requests. +- Prevent bypassing email verification using Salesforce. +- Do not show resource label events referencing not accessible labels. +- Cancel all running CI jobs triggered by the user who is just blocked. +- Fix Gitaly SearchBlobs flag RPC injection. +- Only render fixed number of mermaid blocks. +- Prevent GitLab accounts takeover if SAML is configured. +- Upgrade mermaid to prevent XSS. + + +## 12.1.10 + +- No changes. + ## 12.1.5 ### Security (2 changes) @@ -721,16 +1066,16 @@ entry. ### Security (10 changes) +- Prevent bypass of restriction disabling web password sign in. - Hide confidential issue title on unsubscribe for anonymous users. +- Resolve: Milestones leaked via search API. - Fix url redaction for issue links. +- Add extra fields for handling basic auth on import by url page. - Fix confidential issue label disclosure on milestone view. - Filter relative links in wiki for XSS. +- Prevent invalid branch for merge request. - Prevent XSS injection in note imports. -- Resolve: Milestones leaked via search API. -- Prevent bypass of restriction disabling web password sign in. -- Add extra fields for handling basic auth on import by url page. - Protect Gitlab::HTTP against DNS rebinding attack. -- Prevent invalid branch for merge request. ### Removed (5 changes, 1 of them is from the community) @@ -740,7 +1085,7 @@ entry. - Make Kubernetes service templates readonly. !29044 - Remove Content-Type override for Mattermost OAuth login. (Harrison Healey) -### Fixed (116 changes, 28 of them are from the community) +### Fixed (115 changes, 28 of them are from the community) - Fix col-sm-* in forms to keep layout. !24885 (Takuya Noguchi) - Avoid 500 when rendering users ATOM data. !25408 @@ -753,7 +1098,6 @@ entry. - Bring secondary button styles up to design standard. !27920 - Use FindOrCreateService to create labels and check for existing ones. !27987 (Matt Duren) - Fix "too many loops" error by handling gracefully cron schedules for non existent days. !28002 -- Handle errors in successful notes reply. !28082 - Fix 500 error when accessing charts with an anonymous user. !28091 (Diego Silva) - Allow user to set primary email first when 2FA is required. !28097 (Kartikey Tanna) - Auto-DevOps: allow to disable rollout status check. !28130 (Sergej Nikolaev ) @@ -850,14 +1194,14 @@ entry. - Move Dropdown to Stick to MR View App Button. !29767 - Fix IDE commit using latest ref in branch and overriding contents. !29769 - Revert concurrent pipeline creation for pipeline schedules. !29794 -- Fix layout of group milestone header. -- Fix remote mirrors not updating after tag push. +- Fix border radii on diff files and repo files. - Fix padding of unclickable pipeline dropdown items to match links. +- Fix pipeline schedules when owner is nil. +- Fix remote mirrors not updating after tag push. +- Fix layout of group milestone header. +- Fixed show whitespace button not refetching diff content. - Change resolve button text to mark comment as resolved. - Align system note within discussion with other notes. -- Fix border radii on diff files and repo files. -- Fixed show whitespace button not refetching diff content. -- Fix pipeline schedules when owner is nil. ### Changed (35 changes, 13 of them are from the community) @@ -957,9 +1301,9 @@ entry. - Link to an external dashboard from metrics dashboard. !29369 - Add labels to note event payload. !29384 (Sujay Patel) - Add Join meeting button to issues with Zoom links. !29454 -- Make task completion status available via GraphQL. - Add backtraces to Peek performance bar for SQL calls. - Added diff suggestion feature discovery popover. +- Make task completion status available via GraphQL. ### Other (62 changes, 14 of them are from the community) @@ -1014,17 +1358,17 @@ entry. - Changed the 'Created' label to 'Last Updated' on the container registry table to more accurately reflect what the date represents. !29464 - Update GitLab Pages to v1.6.1. !29559 - Indent collapsible sections. !29804 -- Group download buttons into a .btn-group. -- Change default color of award emoji button. -- Use blue for activity stream links; use monospace font for commit sha. +- Use grid and correct border radius for status badge. - Remove fixed height from MR diff headers. -- Moves the table pagination shared component. -- Add warning that gitlab-secrets isn't included in backup. -- Update merge request tabs so they no longer scroll. +- Use blue for activity stream links; use monospace font for commit sha. +- Moves snowplow to CE repo. - Reduce height of issue board input to align with buttons. +- Change default color of award emoji button. +- Group download buttons into a .btn-group. +- Add warning that gitlab-secrets isn't included in backup. - Increase height of move issue dropdown. -- Use grid and correct border radius for status badge. -- Moves snowplow to CE repo. +- Update merge request tabs so they no longer scroll. +- Moves the table pagination shared component. ## 11.11.8 @@ -1093,7 +1437,7 @@ entry. - Destroy project remote mirrors instead of disabling. !27087 -### Fixed (74 changes, 19 of them are from the community) +### Fixed (75 changes, 19 of them are from the community) - Don't create a temp reference for branch comparisons within project. !24038 - Fix some label links not appearing on group labels page and label title being a link on project labels page. !24060 (Tanya Pazitny) @@ -1154,6 +1498,7 @@ entry. - Fix uploading of LFS tracked file through UI. !28052 - Render Next badge only for gitlab.com. !28056 - Fix update head pipeline process of Pipelines for merge requests. !28057 +- Handle errors in successful notes reply. !28082 - Fix visual issues in set status modal. !28147 - Use a path for the related merge requests endpoint. !28171 - disable SSH key validation in key details view. !28180 (Roger Meier) @@ -1164,10 +1509,10 @@ entry. - Fix project visibility level validation. !28305 (Peter Marko) - Fix incorrect prefix used in new uploads for personal snippets. !28337 - Fix Rugged get_tree_entries recursive flag not working. !28494 -- Fixes next badge being always visible. - Next badge must visible when canary flag is true. -- Adds arrow icons to select option in CI/CD settings. - Vertically aligns the play button for stages. +- Fixes next badge being always visible. +- Adds arrow icons to select option in CI/CD settings. - Allow replying to individual notes from API. ### Changed (19 changes, 3 of them are from the community) @@ -1234,10 +1579,10 @@ entry. - Leave project/group from access granted email. !27892 - Allow Sentry client-side DSN to be passed on gitlab.yml. !27967 - GraphQL: improve evaluation of query complexity based on arguments and query limits. !28017 -- Adds badge for Canary environment and help link. - Support negative matches. -- Show category icons in user popover. - Added Omniauth UltraAuth strategy to GitLab. (Kartikey Tanna) +- Adds badge for Canary environment and help link. +- Show category icons in user popover. ### Other (29 changes, 8 of them are from the community) @@ -1267,9 +1612,22 @@ entry. - Remove the note in the docs that multi-line suggestions are not yet available. !28119 (hardysim) - Update gitlab-shell to v9.1.0. !28184 - Add EE fixtures to SeedFu list. !28241 +- Add some frozen string to spec/**/*.rb. (gfyoung) - Replaces CSS with BS4 utility class for pipeline schedules. - Creates a vendors folder for external CSS. -- Add some frozen string to spec/**/*.rb. (gfyoung) + +### Performance (1 change) + +- Add improvements to global search of issues and merge requests. !27817 + + +## 11.10.7 (2019-06-26) + +### Fixed (3 changes) + +- Remove a default git depth in Pipelines for merge requests. !28926 +- Fix label click scrolling to top. !29202 +- Fix scrolling to top on assignee change. !29500 ## 11.10.8 (2019-06-27) @@ -1309,7 +1667,6 @@ entry. - Fix input group height. - ## 11.10.4 (2019-05-01) ### Fixed (12 changes) @@ -1685,31 +2042,11 @@ entry. ## 11.9.3 (2019-03-27) -### Security (8 changes) - -- Disallow guest users from accessing Releases. -- Fix PDF.js vulnerability. -- Hide "related branches" when user does not have permission. -- Fix XSS in resolve conflicts form. -- Added rake task for removing EXIF data from existing uploads. -- Return cached languages if they've been detected before. -- Disallow updating namespace when updating a project. -- Use UntrustedRegexp for matching refs policy. - +- No changes. ## 11.9.2 (2019-03-26) -### Security (8 changes) - -- Disallow guest users from accessing Releases. -- Fix PDF.js vulnerability. -- Hide "related branches" when user does not have permission. -- Fix XSS in resolve conflicts form. -- Added rake task for removing EXIF data from existing uploads. -- Return cached languages if they've been detected before. -- Disallow updating namespace when updating a project. -- Use UntrustedRegexp for matching refs policy. - +- No changes. ## 11.9.1 (2019-03-25) @@ -2324,16 +2661,7 @@ entry. ## 11.7.8 (2019-03-26) -### Security (7 changes) - -- Disallow guest users from accessing Releases. -- Fix PDF.js vulnerability. -- Hide "related branches" when user does not have permission. -- Fix XSS in resolve conflicts form. -- Added rake task for removing EXIF data from existing uploads. -- Disallow updating namespace when updating a project. -- Use UntrustedRegexp for matching refs policy. - +- No changes. ## 11.7.7 (2019-03-19) @@ -2343,7 +2671,7 @@ entry. - Fixed ability to see private groups by users not belonging to given group. -## 11.7.5 (2019-02-06) +## 11.7.5 (2019-02-05) ### Fixed (8 changes) @@ -2582,10 +2910,9 @@ entry. ## 11.6.11 (2019-04-23) -### Security (2 changes) +### Security (1 change) - Fixed ability to see private groups by users not belonging to given group. -- Fix XSS in resolve conflicts form. ### Fixed (2 changes) @@ -2631,6 +2958,13 @@ entry. - Fix leaking private repository information in API. +## 11.6.9 (2019-02-04) + +### Security (1 change) + +- Use sanitized user status message for user popover. + + ## 11.6.8 (2019-01-30) - No changes. @@ -3155,7 +3489,6 @@ entry. - Fix a race condition intermittently breaking GitLab startup. !23028 - Adds margin after a deleted branch name in the activity feed. !23038 - Ignore environment validation failure. !23100 -- Fixes broken borders for reports section in MR widget. - Adds CI favicon back to jobs page. - Redirect to the pipeline builds page when a build is canceled. (Eva Kadlecova) - Fixed diff stats not showing when performance bar is enabled. @@ -3164,12 +3497,13 @@ entry. - Fix bug causing not all emails to show up in commit email selectbox. - Remove duplicate escape in job sidebar. - Fixing styling issues on the scheduled pipelines page. +- Fixes broken test in master. - Renders stuck block when runners are stuck. - Removes extra border from test reports in the merge request widget. +- Fixes broken borders for reports section in MR widget. - Only render link to branch when branch still exists in pipeline page. - Fixed source project not filtering in merge request creation compare form. - Do not reload self on hooks when creating deployment. -- Fixes broken test in master. ### Changed (38 changes, 12 of them are from the community) @@ -8086,7 +8420,7 @@ entry. - Reinstate is_admin flag in users api when authenticated user is an admin. !12211 (rickettm) - Fix edit button for deploy keys available from other projects. !12301 (Alexander Randa) - Fix passing CI_ENVIRONMENT_NAME and CI_ENVIRONMENT_SLUG for CI_ENVIRONMENT_URL. !12344 -- Disable environment list refresh due to bug https://gitlab.com/gitlab-org/gitlab-ee/issues/2677. !12347 +- Disable environment list refresh due to bug https://gitlab.com/gitlab-org/gitlab/issues/2677. !12347 - Standardize timeline note margins across different viewport sizes. !12364 - Fix Ordered Task List Items. !31483 (Jared Deckard ) - Upgrade dependency to Go 1.8.3. !31943 @@ -9627,4 +9961,3 @@ entry. ## 8.15.8 through 0.8.0 - See [changelogs/archive.md](changelogs/archive.md) - diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4c954448a5d37b5bcfb2f45eac63c057007a826..030624b8df98177a935f382e988104f48f557c79 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,9 @@ -## Developer Certificate of Origin + License +## Contributor license agreement -By contributing to GitLab B.V., You accept and agree to the following terms and -conditions for Your present and future Contributions submitted to GitLab B.V. -Except for the license granted herein to GitLab B.V. and recipients of software -distributed by GitLab B.V., You reserve all right, title, and interest in and to -Your Contributions. All Contributions are subject to the following DCO + License -terms. - -[DCO + License](https://gitlab.com/gitlab-org/dco/blob/master/README.md) +By submitting code as an individual you agree to the +[individual contributor license agreement](doc/legal/individual_contributor_license_agreement.md). +By submitting code as an entity you agree to the +[corporate contributor license agreement](doc/legal/corporate_contributor_license_agreement.md). All Documentation content that resides under the [doc/ directory](/doc) of this repository is licensed under Creative Commons: diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 76d05362056834143a07e0e1fa723bc9e1e49f71..09f245728f691f0945f44b1a5422424236a1e1fd 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -1.62.0 +1.65.1 diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION index a8fdfda1c7824e3986f12c42b9abb7a1305a6c6c..81c871de46b3eeef1d5f62bf65d62f16c97db309 100644 --- a/GITLAB_PAGES_VERSION +++ b/GITLAB_PAGES_VERSION @@ -1 +1 @@ -1.8.1 +1.10.0 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index 7f6758ef97bc0622a1233affbf717a67d4c22953..db3905bf80f1eb50a083dee17e2ca761949db73d 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -8.10.0 +8.11.0 diff --git a/Gemfile b/Gemfile index 7fb9838b8b0749507414dcc7b7c03acf6022c662..67c0e6b4ce04afd7d0767afdbb072efa5b1f5d50 100644 --- a/Gemfile +++ b/Gemfile @@ -48,6 +48,9 @@ gem 'omniauth-salesforce', '~> 1.0.5' gem 'rack-oauth2', '~> 1.9.3' gem 'jwt', '~> 2.1.0' +# Kerberos authentication. EE-only +gem 'gssapi', group: :kerberos + # Spam and anti-bot protection gem 'recaptcha', '~> 4.11', require: 'recaptcha/rails' gem 'akismet', '~> 2.0' @@ -84,9 +87,9 @@ gem 'rack-cors', '~> 1.0.0', require: 'rack/cors' # GraphQL API gem 'graphql', '~> 1.9.11' -# NOTE: graphiql-rails v1.5+ doesn't work: https://gitlab.com/gitlab-org/gitlab-ce/issues/67293 +# NOTE: graphiql-rails v1.5+ doesn't work: https://gitlab.com/gitlab-org/gitlab/issues/31771 # 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-ce/issues/67263 +# https://gitlab.com/gitlab-org/gitlab/issues/31747 gem 'graphiql-rails', '~> 1.4.10' gem 'apollo_upload_server', '~> 2.0.0.beta3' gem 'graphql-docs', '~> 1.6.0', group: [:development, :test] @@ -124,6 +127,13 @@ gem 'unf', '~> 0.1.4' # Seed data gem 'seed-fu', '~> 2.3.7' +# Search +gem 'elasticsearch-model', '~> 0.1.9' +gem 'elasticsearch-rails', '~> 0.1.9', require: 'elasticsearch/rails/instrumentation' +gem 'elasticsearch-api', '5.0.3' +gem 'aws-sdk' +gem 'faraday_middleware-aws-signers-v4' + # Markdown and HTML processing gem 'html-pipeline', '~> 2.8' gem 'deckar01-task_list', '2.2.0' @@ -138,7 +148,7 @@ gem 'wikicloth', '0.8.1' gem 'asciidoctor', '~> 2.0.10' gem 'asciidoctor-include-ext', '~> 0.3.1', require: false gem 'asciidoctor-plantuml', '0.0.9' -gem 'rouge', '~> 3.10' +gem 'rouge', '~> 3.11.0' gem 'truncato', '~> 0.7.11' gem 'bootstrap_form', '~> 4.2.0' gem 'nokogiri', '~> 1.10.4' @@ -281,6 +291,8 @@ gem 'gon', '~> 6.2' gem 'request_store', '~> 1.3' gem 'base32', '~> 0.3.0' +gem "gitlab-license", "~> 1.0" + # Sentry integration gem 'sentry-raven', '~> 2.9' @@ -299,7 +311,7 @@ gem 'gettext', '~> 3.2.2', require: false, group: :development gem 'batch-loader', '~> 1.4.0' # Perf bar -# https://gitlab.com/gitlab-org/gitlab-ee/issues/13996 +# https://gitlab.com/gitlab-org/gitlab/issues/13996 gem 'gitlab-peek', '~> 0.0.1', require: 'peek' # Snowplow events tracking @@ -314,7 +326,7 @@ group :metrics do gem 'influxdb', '~> 0.2', require: false # Prometheus - gem 'prometheus-client-mmap', '~> 0.9.9' + gem 'prometheus-client-mmap', '~> 0.9.10' gem 'raindrops', '~> 0.18' end @@ -393,7 +405,7 @@ group :test do gem 'webmock', '~> 3.5.1' gem 'rails-controller-testing' gem 'concurrent-ruby', '~> 1.1' - gem 'test-prof', '~> 0.2.5' + gem 'test-prof', '~> 0.10.0' gem 'rspec_junit_formatter' end @@ -420,6 +432,9 @@ gem 'health_check', '~> 2.6.0' gem 'vmstat', '~> 2.3.0' gem 'sys-filesystem', '~> 1.1.6' +# NTP client +gem 'net-ntp' + # SSH host key support gem 'net-ssh', '~> 5.2' gem 'sshkey', '~> 2.0' @@ -431,7 +446,7 @@ group :ed25519 do end # Gitaly GRPC protocol definitions -gem 'gitaly', '~> 1.58.0' +gem 'gitaly', '~> 1.65.0' gem 'grpc', '~> 1.19.0' @@ -449,5 +464,8 @@ gem 'unleash', '~> 0.1.5' gem 'lograge', '~> 0.5' gem 'grape_logging', '~> 1.7' +# DNS Lookup +gem 'net-dns', '~> 0.9.0' + # Countries list gem 'countries', '~> 3.0' diff --git a/Gemfile.lock b/Gemfile.lock index 3952d06867848c6560556a6b52f17773a839acc0..4a2016c8a8b02a62ceb95821564840dd969b6e9f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -80,6 +80,14 @@ GEM encryptor (~> 3.0.0) attr_required (1.0.1) awesome_print (1.8.0) + aws-sdk (2.9.32) + aws-sdk-resources (= 2.9.32) + aws-sdk-core (2.9.32) + aws-sigv4 (~> 1.0) + jmespath (~> 1.0) + aws-sdk-resources (2.9.32) + aws-sdk-core (= 2.9.32) + aws-sigv4 (1.0.0) axiom-types (0.1.1) descendants_tracker (~> 0.0.4) ice_nine (~> 0.11.0) @@ -100,7 +108,7 @@ GEM binding_ninja (0.2.3) binding_of_caller (0.8.0) debug_inspector (>= 0.0.1) - bootsnap (1.4.4) + bootsnap (1.4.5) msgpack (~> 1.0) bootstrap_form (4.2.0) actionpack (>= 5.0) @@ -226,6 +234,19 @@ GEM doorkeeper (~> 4.3) json-jwt (~> 1.6) ed25519 (1.2.4) + elasticsearch (5.0.3) + elasticsearch-api (= 5.0.3) + elasticsearch-transport (= 5.0.3) + elasticsearch-api (5.0.3) + multi_json + elasticsearch-model (0.1.9) + activesupport (> 3) + elasticsearch (> 0.4) + hashie + elasticsearch-rails (0.1.9) + elasticsearch-transport (5.0.3) + faraday + multi_json email_reply_trimmer (0.1.6) email_spec (2.2.0) htmlentities (~> 4.3.3) @@ -254,6 +275,9 @@ GEM faraday (~> 0.8) faraday_middleware (0.12.2) faraday (>= 0.7.4, < 1.0) + faraday_middleware-aws-signers-v4 (0.1.7) + aws-sdk-resources (~> 2) + faraday (~> 0.9) faraday_middleware-multi_json (0.0.6) faraday_middleware multi_json @@ -334,7 +358,7 @@ GEM po_to_json (>= 1.0.0) rails (>= 3.2.0) git (1.5.0) - gitaly (1.58.0) + gitaly (1.65.0) grpc (~> 1.0) github-markup (1.7.0) gitlab-labkit (0.5.2) @@ -344,6 +368,7 @@ GEM jaeger-client (~> 0.10) opentracing (~> 0.4) redis (> 3.0.0, < 5.0.0) + gitlab-license (1.0.0) gitlab-markup (1.7.0) gitlab-peek (0.0.1) railties (>= 4.0.0) @@ -417,6 +442,8 @@ GEM grpc (1.19.0) google-protobuf (~> 3.1) googleapis-common-protos-types (~> 1.0.0) + gssapi (1.2.0) + ffi (>= 1.0.1) haml (5.0.4) temple (>= 0.8.0) tilt @@ -480,6 +507,7 @@ GEM atlassian-jwt multipart-post oauth (~> 0.5, >= 0.5.0) + jmespath (1.3.1) js_regex (3.1.1) character_set (~> 1.1) regexp_parser (~> 1.1) @@ -558,7 +586,7 @@ GEM mini_mime (1.0.1) mini_portile2 (2.4.0) minitest (5.11.3) - msgpack (1.3.0) + msgpack (1.3.1) multi_json (1.13.1) multi_xml (0.6.0) multipart-post (2.0.0) @@ -568,7 +596,9 @@ GEM mustermann (~> 1.0.0) nakayoshi_fork (0.0.4) nap (1.1.0) + net-dns (0.9.0) net-ldap (0.16.0) + net-ntp (2.1.3) net-ssh (5.2.0) netrc (0.11.0) nio4r (2.3.1) @@ -685,7 +715,7 @@ GEM parser unparser procto (0.0.3) - prometheus-client-mmap (0.9.9) + prometheus-client-mmap (0.9.10) pry (0.11.3) coderay (~> 1.1.0) method_source (~> 0.9.0) @@ -804,7 +834,7 @@ GEM retriable (3.1.2) rinku (2.0.0) rotp (2.1.2) - rouge (3.10.0) + rouge (3.11.0) rqrcode (0.7.0) chunky_png rqrcode-rails3 (0.1.7) @@ -961,10 +991,10 @@ GEM sys-filesystem (1.1.6) ffi sysexits (1.2.0) - temple (0.8.0) + temple (0.8.1) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) - test-prof (0.2.5) + test-prof (0.10.0) text (1.3.1) thin (1.7.2) daemons (~> 1.0, >= 1.0.9) @@ -973,7 +1003,7 @@ GEM thor (0.19.4) thread_safe (0.3.6) thrift (0.11.0.0) - tilt (2.0.8) + tilt (2.0.9) timecop (0.8.1) timfel-krb5-auth (0.8.3) toml (0.2.0) @@ -1070,6 +1100,7 @@ DEPENDENCIES atlassian-jwt (~> 0.2.0) attr_encrypted (~> 3.1.0) awesome_print + aws-sdk babosa (~> 1.0.2) base32 (~> 0.3.0) batch-loader (~> 1.4.0) @@ -1107,11 +1138,15 @@ DEPENDENCIES doorkeeper (~> 4.3) doorkeeper-openid_connect (~> 1.5) ed25519 (~> 1.2) + elasticsearch-api (= 5.0.3) + elasticsearch-model (~> 0.1.9) + elasticsearch-rails (~> 0.1.9) email_reply_trimmer (~> 0.1) email_spec (~> 2.2.0) escape_utils (~> 1.1) factory_bot_rails (~> 4.8.2) faraday (~> 0.12) + faraday_middleware-aws-signers-v4 fast_blank ffaker (~> 2.10) flipper (~> 0.13.0) @@ -1133,9 +1168,10 @@ DEPENDENCIES gettext (~> 3.2.2) gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails_js (~> 1.3) - gitaly (~> 1.58.0) + gitaly (~> 1.65.0) github-markup (~> 1.7.0) gitlab-labkit (~> 0.5) + gitlab-license (~> 1.0) gitlab-markup (~> 1.7.0) gitlab-peek (~> 0.0.1) gitlab-sidekiq-fetcher (= 0.5.2) @@ -1154,6 +1190,7 @@ DEPENDENCIES graphql (~> 1.9.11) graphql-docs (~> 1.6.0) grpc (~> 1.19.0) + gssapi haml_lint (~> 0.31.0) hamlit (~> 2.8.8) hangouts-chat (~> 0.0.5) @@ -1185,7 +1222,9 @@ DEPENDENCIES mini_magick minitest (~> 5.11.0) nakayoshi_fork (~> 0.0.4) + net-dns (~> 0.9.0) net-ldap + net-ntp net-ssh (~> 5.2) nokogiri (~> 1.10.4) oauth2 (~> 1.4) @@ -1211,7 +1250,7 @@ DEPENDENCIES org-ruby (~> 0.9.12) pg (~> 1.1) premailer-rails (~> 1.9.7) - prometheus-client-mmap (~> 0.9.9) + prometheus-client-mmap (~> 0.9.10) pry-byebug (~> 3.5.1) pry-rails (~> 0.3.4) puma (~> 3.12) @@ -1237,7 +1276,7 @@ DEPENDENCIES redis-rails (~> 5.0.2) request_store (~> 1.3) responders (~> 2.0) - rouge (~> 3.10) + rouge (~> 3.11.0) rqrcode-rails3 (~> 0.1.7) rspec-parameterized rspec-rails (~> 3.8.0) @@ -1275,7 +1314,7 @@ DEPENDENCIES stackprof (~> 0.2.10) state_machines-activerecord (~> 0.5.1) sys-filesystem (~> 1.1.6) - test-prof (~> 0.2.5) + test-prof (~> 0.10.0) thin (~> 1.7.0) timecop (~> 0.8.0) toml-rb (~> 1.0.0) diff --git a/PROCESS.md b/PROCESS.md index f0a82838f62a6c4a2ad17050a429de2752594e9e..997612dfbad77e33a83ac48f236c01a415beb28b 100644 --- a/PROCESS.md +++ b/PROCESS.md @@ -328,7 +328,7 @@ Thanks for the issue report. This issue has already been fixed in newer versions Due to the size of this project and our limited resources we are only able to support the latest stable release as outlined in our [contributing guidelines](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html). In order to get this bug fix and enjoy many new features please -[upgrade](https://gitlab.com/gitlab-org/gitlab-ce/tree/master/doc/update). +[upgrade](https://gitlab.com/gitlab-org/gitlab/tree/master/doc/update). If you still experience issues at that time please open a new issue following our issue tracker guidelines found in the [contributing guidelines](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html#issue-tracker-guidelines). ``` @@ -337,14 +337,14 @@ tracker guidelines found in the [contributing guidelines](https://docs.gitlab.co ``` Thanks for your interest in improving the GitLab codebase! -Please update your merge request according to the [contributing guidelines](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/contributing/merge_request_workflow.md#merge-request-guidelines). +Please update your merge request according to the [contributing guidelines](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/development/contributing/merge_request_workflow.md#merge-request-guidelines). ``` ### Accepting merge requests ``` Is there an issue on the -[issue tracker](https://gitlab.com/gitlab-org/gitlab-ce/issues) that is +[issue tracker](https://gitlab.com/gitlab-org/gitlab/issues) that is similar to this? Could you please link it here? Please be aware that new functionality that is not marked [`Accepting merge requests`](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html#label-for-community-contributors) diff --git a/README.md b/README.md index bfc55f2827973c90c46763dec1310f64a8448eb7..95a2192a37525614995e9e50b8df8e6e1e4d78b4 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ ## Canonical source -The canonical source of GitLab Community Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/). +The canonical source of GitLab where all development takes place is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab). -The source of GitLab Enterprise Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ee). +If you wish to clone a copy of GitLab without proprietary code, you can use the read-only mirror of GitLab located at https://gitlab.com/gitlab-org/gitlab-foss/. Please do not submit any issues and/or merge requests to this project. ## Free trial diff --git a/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js b/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js deleted file mode 100644 index 6a40f1cbc5ec17124d3ab9d59dbf149853fbf608..0000000000000000000000000000000000000000 --- a/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - data() { - return { - isCustomStageForm: false, - }; - }, - methods: { - showAddStageForm: () => {}, - hideAddStageForm: () => {}, - }, -}; diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index 992c5e5e330ae83c024b035b3c69917997aff7f9..d57be10f47278f88f41687b09bc40a39839741a4 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -74,6 +74,11 @@ const Api = { }); }, + groupLabels(namespace) { + const url = Api.buildUrl(Api.groupLabelsPath).replace(':namespace_path', namespace); + return axios.get(url).then(({ data }) => data); + }, + // Return namespaces list. Filtered by query namespaces(query, callback) { const url = Api.buildUrl(Api.namespacesPath); diff --git a/app/assets/javascripts/autosave.js b/app/assets/javascripts/autosave.js index e8c59fab6095318160f50bc4852d9e59199ec02e..7652b67ae1e45a4bef44402c56b153d3e7627c20 100644 --- a/app/assets/javascripts/autosave.js +++ b/app/assets/javascripts/autosave.js @@ -1,4 +1,4 @@ -/* eslint-disable no-param-reassign, prefer-template, no-void, consistent-return */ +/* eslint-disable no-param-reassign, no-void, consistent-return */ import AccessorUtilities from './lib/utils/accessor'; @@ -10,7 +10,7 @@ export default class Autosave { if (key.join != null) { key = key.join('/'); } - this.key = 'autosave/' + key; + this.key = `autosave/${key}`; this.field.data('autosave', this); this.restore(); this.field.on('input', () => this.save()); diff --git a/app/assets/javascripts/badges/components/badge_settings.vue b/app/assets/javascripts/badges/components/badge_settings.vue index 75a522efe7e6341bff8bb0515c070ab3042f2612..531f84ad272526b6e2c904f006a2513485e9527d 100644 --- a/app/assets/javascripts/badges/components/badge_settings.vue +++ b/app/assets/javascripts/badges/components/badge_settings.vue @@ -2,7 +2,7 @@ import { mapState, mapActions } from 'vuex'; import createFlash from '~/flash'; import { s__ } from '~/locale'; -import GlModal from '~/vue_shared/components/gl_modal.vue'; +import DeprecatedModal2 from '~/vue_shared/components/deprecated_modal_2.vue'; import Badge from './badge.vue'; import BadgeForm from './badge_form.vue'; import BadgeList from './badge_list.vue'; @@ -13,7 +13,7 @@ export default { Badge, BadgeForm, BadgeList, - GlModal, + GlModal: DeprecatedModal2, }, computed: { ...mapState(['badgeInModal', 'isEditing']), diff --git a/app/assets/javascripts/behaviors/markdown/render_mermaid.js b/app/assets/javascripts/behaviors/markdown/render_mermaid.js index 2770850479107ca3d6ea47bed3663614dd66b9f2..c3e2c09f1d50a816edf8c0de2732424ac6111f0e 100644 --- a/app/assets/javascripts/behaviors/markdown/render_mermaid.js +++ b/app/assets/javascripts/behaviors/markdown/render_mermaid.js @@ -36,6 +36,8 @@ export default function renderMermaid($els) { securityLevel: 'strict', }); + let renderedChars = 0; + $els.each((i, el) => { // Mermaid doesn't like `
` tags, so collapse all like tags into `
`, which is parsed correctly. const source = el.textContent.replace(//g, '
'); @@ -45,7 +47,7 @@ export default function renderMermaid($els) { * prevent mermaidjs from hanging up the entire thread and * causing a DoS. */ - if (source && source.length > MAX_CHAR_LIMIT) { + if ((source && source.length > MAX_CHAR_LIMIT) || renderedChars > MAX_CHAR_LIMIT) { el.textContent = sprintf( __( 'Cannot render the image. Maximum character count (%{charLimit}) has been exceeded.', @@ -55,6 +57,7 @@ export default function renderMermaid($els) { return; } + renderedChars += source.length; // Remove any extra spans added by the backend syntax highlighting. Object.assign(el, { textContent: source }); diff --git a/app/assets/javascripts/behaviors/markdown/render_metrics.js b/app/assets/javascripts/behaviors/markdown/render_metrics.js index 252b98610b698c7cd7e3d498779f3f0367dfb052..8050604e6e7e27bfabae56ebd5487a02a276b7c9 100644 --- a/app/assets/javascripts/behaviors/markdown/render_metrics.js +++ b/app/assets/javascripts/behaviors/markdown/render_metrics.js @@ -2,7 +2,7 @@ import Vue from 'vue'; import Metrics from '~/monitoring/components/embed.vue'; import { createStore } from '~/monitoring/stores'; -// TODO: Handle copy-pasting - https://gitlab.com/gitlab-org/gitlab-ce/issues/64369. +// TODO: Handle copy-pasting - https://gitlab.com/gitlab-org/gitlab-foss/issues/64369. export default function renderMetrics(elements) { if (!elements.length) { return; diff --git a/app/assets/javascripts/behaviors/preview_markdown.js b/app/assets/javascripts/behaviors/preview_markdown.js index b2571fb840ce61ab1e21a7f524238ae1cbcedfbb..a07942d87cb511994ddc5b53a8c2b094b401aba4 100644 --- a/app/assets/javascripts/behaviors/preview_markdown.js +++ b/app/assets/javascripts/behaviors/preview_markdown.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, no-var, object-shorthand, prefer-arrow-callback */ +/* eslint-disable func-names, no-var */ import $ from 'jquery'; import axios from '~/lib/utils/axios_utils'; @@ -45,26 +45,22 @@ MarkdownPreview.prototype.showPreview = function($form) { this.hideReferencedUsers($form); } else { preview.addClass('md-preview-loading').text(__('Loading...')); - this.fetchMarkdownPreview( - mdText, - url, - function(response) { - var body; - if (response.body.length > 0) { - ({ body } = response); - } else { - body = this.emptyMessage; - } - - preview.removeClass('md-preview-loading').html(body); - preview.renderGFM(); - this.renderReferencedUsers(response.references.users, $form); - - if (response.references.commands) { - this.renderReferencedCommands(response.references.commands, $form); - } - }.bind(this), - ); + this.fetchMarkdownPreview(mdText, url, response => { + var body; + if (response.body.length > 0) { + ({ body } = response); + } else { + body = this.emptyMessage; + } + + preview.removeClass('md-preview-loading').html(body); + preview.renderGFM(); + this.renderReferencedUsers(response.references.users, $form); + + if (response.references.commands) { + this.renderReferencedCommands(response.references.commands, $form); + } + }); } }; @@ -82,7 +78,7 @@ MarkdownPreview.prototype.fetchMarkdownPreview = function(text, url, success) { }) .then(({ data }) => { this.ajaxCache = { - text: text, + text, response: data, }; success(data); @@ -132,12 +128,12 @@ const markdownToolbar = $('.md-header-toolbar'); $.fn.setupMarkdownPreview = function() { var $form = $(this); - $form.find('textarea.markdown-area').on('input', function() { + $form.find('textarea.markdown-area').on('input', () => { markdownPreview.hideReferencedUsers($form); }); }; -$(document).on('markdown-preview:show', function(e, $form) { +$(document).on('markdown-preview:show', (e, $form) => { if (!$form) { return; } @@ -162,7 +158,7 @@ $(document).on('markdown-preview:show', function(e, $form) { markdownPreview.showPreview($form); }); -$(document).on('markdown-preview:hide', function(e, $form) { +$(document).on('markdown-preview:hide', (e, $form) => { if (!$form) { return; } @@ -191,7 +187,7 @@ $(document).on('markdown-preview:hide', function(e, $form) { markdownPreview.hideReferencedCommands($form); }); -$(document).on('markdown-preview:toggle', function(e, keyboardEvent) { +$(document).on('markdown-preview:toggle', (e, keyboardEvent) => { var $target; $target = $(keyboardEvent.target); if ($target.is('textarea.markdown-area')) { diff --git a/app/assets/javascripts/behaviors/requires_input.js b/app/assets/javascripts/behaviors/requires_input.js index d8056e48d4edbec2c885ba56ebcd7292ce8b519a..7cf18d1fd83d2f98b6827c5f3ca7fa6557c96beb 100644 --- a/app/assets/javascripts/behaviors/requires_input.js +++ b/app/assets/javascripts/behaviors/requires_input.js @@ -26,7 +26,7 @@ $.fn.requiresInput = function requiresInput() { const values = _.map($(fieldSelector, $form), field => field.value); // Disable the button if any required fields are empty - if (values.length && _.any(values, _.isEmpty)) { + if (values.length && _.some(values, _.isEmpty)) { $button.disable(); } else { $button.enable(); diff --git a/app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js b/app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js index 75777b910cab6a1d4f4336614bf85bb6400cd7ef..87c8568802e551bc7a0690f0e90f335cd68f66bb 100644 --- a/app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js +++ b/app/assets/javascripts/blob/balsamiq/balsamiq_viewer.js @@ -1,5 +1,7 @@ import sqljs from 'sql.js'; import { template as _template } from 'underscore'; +import axios from '~/lib/utils/axios_utils'; +import { successCodes } from '~/lib/utils/http_status'; const PREVIEW_TEMPLATE = _template(`
@@ -16,30 +18,25 @@ class BalsamiqViewer { } loadFile(endpoint) { - return new Promise((resolve, reject) => { - const xhr = new XMLHttpRequest(); - - xhr.open('GET', endpoint, true); - xhr.responseType = 'arraybuffer'; - xhr.onload = loadEvent => this.fileLoaded(loadEvent, resolve, reject); - xhr.onerror = reject; - - xhr.send(); - }); - } - - fileLoaded(loadEvent, resolve, reject) { - if (loadEvent.target.status !== 200) return reject(); - - this.renderFile(loadEvent); - - return resolve(); + return axios + .get(endpoint, { + responseType: 'arraybuffer', + validateStatus(status) { + return status !== successCodes.OK; + }, + }) + .then(({ data }) => { + this.renderFile(data); + }) + .catch(e => { + throw new Error(e); + }); } - renderFile(loadEvent) { + renderFile(fileBuffer) { const container = document.createElement('ul'); - this.initDatabase(loadEvent.target.response); + this.initDatabase(fileBuffer); const previews = this.getPreviews(); previews.forEach(preview => { diff --git a/app/assets/javascripts/blob/blob_file_dropzone.js b/app/assets/javascripts/blob/blob_file_dropzone.js index 9010cd0c3c1aeb5dc2f80b39149f1bdf4b12795e..8acf0827c44227a787c8ef924d66da93f3c3edd0 100644 --- a/app/assets/javascripts/blob/blob_file_dropzone.js +++ b/app/assets/javascripts/blob/blob_file_dropzone.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, object-shorthand, prefer-arrow-callback */ +/* eslint-disable func-names */ import $ from 'jquery'; import Dropzone from 'dropzone'; @@ -32,7 +32,7 @@ export default class BlobFileDropzone { url: form.attr('action'), // Rails uses a hidden input field for PUT // http://stackoverflow.com/questions/21056482/how-to-set-method-put-in-form-tag-in-rails - method: method, + method, clickable: true, uploadMultiple: false, paramName: 'file', @@ -42,19 +42,19 @@ export default class BlobFileDropzone { addRemoveLinks: true, previewsContainer: '.dropzone-previews', headers: csrf.headers, - init: function() { - this.on('addedfile', function() { + init() { + this.on('addedfile', () => { toggleLoading(submitButton, submitButtonLoadingIcon, false); dropzoneMessage.addClass(HIDDEN_CLASS); $('.dropzone-alerts') .html('') .hide(); }); - this.on('removedfile', function() { + this.on('removedfile', () => { toggleLoading(submitButton, submitButtonLoadingIcon, false); dropzoneMessage.removeClass(HIDDEN_CLASS); }); - this.on('success', function(header, response) { + this.on('success', (header, response) => { $('#modal-upload-blob').modal('hide'); visitUrl(response.filePath); }); @@ -62,14 +62,14 @@ export default class BlobFileDropzone { dropzoneMessage.addClass(HIDDEN_CLASS); this.removeFile(file); }); - this.on('sending', function(file, xhr, formData) { + this.on('sending', (file, xhr, formData) => { formData.append('branch_name', form.find('.js-branch-name').val()); formData.append('create_merge_request', form.find('.js-create-merge-request').val()); formData.append('commit_message', form.find('.js-commit-message').val()); }); }, // Override behavior of adding error underneath preview - error: function(file, errorMessage) { + error(file, errorMessage) { const stripped = $('
') .html(errorMessage) .text(); diff --git a/app/assets/javascripts/blob/template_selector.js b/app/assets/javascripts/blob/template_selector.js index 37e348d93d31ede733137c6ab746f7aa419fd52b..02216e4e93d459038a1bddbf0a20c3eecf0299a7 100644 --- a/app/assets/javascripts/blob/template_selector.js +++ b/app/assets/javascripts/blob/template_selector.js @@ -1,6 +1,7 @@ -/* eslint-disable class-methods-use-this, no-unused-vars */ +/* eslint-disable class-methods-use-this */ import $ from 'jquery'; +import '~/gl_dropdown'; export default class TemplateSelector { constructor({ dropdown, data, pattern, wrapper, editor, $input } = {}) { @@ -61,7 +62,7 @@ export default class TemplateSelector { return this.requestFile(item); } - requestFile(item) { + requestFile() { // This `requestFile` method is an abstract method that should // be added by all subclasses. } diff --git a/app/assets/javascripts/boards/components/board.js b/app/assets/javascripts/boards/components/board.js index c6122fbc686c7f31de737e77f57b80b103d725c3..58759fd1efe1835cb5dac5abbe5b908e3db23ae8 100644 --- a/app/assets/javascripts/boards/components/board.js +++ b/app/assets/javascripts/boards/components/board.js @@ -50,6 +50,9 @@ export default Vue.extend({ }; }, computed: { + isLoggedIn() { + return Boolean(gon.current_user_id); + }, counterTooltip() { const { issuesSize } = this.list; return `${n__('%d issue', '%d issues', issuesSize)}`; @@ -106,7 +109,11 @@ export default Vue.extend({ Sortable.create(this.$el.parentNode, sortableOptions); }, created() { - if (this.list.isExpandable && AccessorUtilities.isLocalStorageAccessSafe()) { + if ( + this.list.isExpandable && + AccessorUtilities.isLocalStorageAccessSafe() && + !this.isLoggedIn + ) { const isCollapsed = localStorage.getItem(`${this.uniqueKey}.expanded`) === 'false'; this.list.isExpanded = !isCollapsed; @@ -120,10 +127,14 @@ export default Vue.extend({ if (this.list.isExpandable) { this.list.isExpanded = !this.list.isExpanded; - if (AccessorUtilities.isLocalStorageAccessSafe()) { + if (AccessorUtilities.isLocalStorageAccessSafe() && !this.isLoggedIn) { localStorage.setItem(`${this.uniqueKey}.expanded`, this.list.isExpanded); } + if (this.isLoggedIn) { + this.list.update(); + } + // When expanding/collapsing, the tooltip on the caret button sometimes stays open. // Close all tooltips manually to prevent dangling tooltips. $('.tooltip').tooltip('hide'); diff --git a/app/assets/javascripts/boards/components/board_blank_state.vue b/app/assets/javascripts/boards/components/board_blank_state.vue index 9f26337d1532c69cff036d29fdc8bdcbbedfba04..9a1da810ad043af6faeead8445d8c98cadcb06fb 100644 --- a/app/assets/javascripts/boards/components/board_blank_state.vue +++ b/app/assets/javascripts/boards/components/board_blank_state.vue @@ -29,25 +29,25 @@ export default { }); }); + const loadListIssues = listObj => { + const list = boardsStore.findList('title', listObj.title); + + if (!list) { + return null; + } + + list.id = listObj.id; + list.label.id = listObj.label.id; + return list.getIssues().catch(() => { + // TODO: handle request error + }); + }; + // Save the labels boardsStore .generateDefaultLists() .then(res => res.data) - .then(data => { - data.forEach(listObj => { - const list = boardsStore.findList('title', listObj.title); - - if (!list) { - return; - } - - list.id = listObj.id; - list.label.id = listObj.label.id; - list.getIssues().catch(() => { - // TODO: handle request error - }); - }); - }) + .then(data => Promise.all(data.map(loadListIssues))) .catch(() => { boardsStore.removeList(undefined, 'label'); Cookies.remove('issue_board_welcome_hidden', { diff --git a/app/assets/javascripts/boards/components/issue_card_inner.vue b/app/assets/javascripts/boards/components/issue_card_inner.vue index 7f554c99669e6270b8a42576cab5408e6a4b63e2..2acd92069ca5b3e87fbb806e423aff5a071ee902 100644 --- a/app/assets/javascripts/boards/components/issue_card_inner.vue +++ b/app/assets/javascripts/boards/components/issue_card_inner.vue @@ -104,6 +104,13 @@ export default { helpLink() { return boardsStore.scopedLabels.helpLink; }, + validIssueWeight() { + if (_.isNumber(this.issue.weight)) { + return this.issue.weight >= 0; + } + + return false; + }, }, methods: { isIndexLessThanlimit(index) { @@ -212,7 +219,7 @@ export default { diff --git a/app/assets/javascripts/boards/components/new_list_dropdown.js b/app/assets/javascripts/boards/components/new_list_dropdown.js index c8a9cb1c296c2d284c042d85727ee8e9fb270319..229bb82152b8ca24e7ae9993c55727c5c2b0adaa 100644 --- a/app/assets/javascripts/boards/components/new_list_dropdown.js +++ b/app/assets/javascripts/boards/components/new_list_dropdown.js @@ -1,7 +1,9 @@ -/* eslint-disable func-names, no-new, promise/catch-or-return */ +/* eslint-disable func-names, no-new */ import $ from 'jquery'; +import { __ } from '~/locale'; import axios from '~/lib/utils/axios_utils'; +import flash from '~/flash'; import CreateLabelDropdown from '../../create_label'; import boardsStore from '../stores/boards_store'; @@ -26,18 +28,23 @@ $(document) export default function initNewListDropdown() { $('.js-new-board-list').each(function() { - const $this = $(this); + const $dropdownToggle = $(this); + const $dropdown = $dropdownToggle.closest('.dropdown'); new CreateLabelDropdown( - $this.closest('.dropdown').find('.dropdown-new-label'), - $this.data('namespacePath'), - $this.data('projectPath'), + $dropdown.find('.dropdown-new-label'), + $dropdownToggle.data('namespacePath'), + $dropdownToggle.data('projectPath'), ); - $this.glDropdown({ + $dropdownToggle.glDropdown({ data(term, callback) { - axios.get($this.attr('data-list-labels-path')).then(({ data }) => { - callback(data); - }); + axios + .get($dropdownToggle.attr('data-list-labels-path')) + .then(({ data }) => callback(data)) + .catch(() => { + $dropdownToggle.data('bs.dropdown').hide(); + flash(__('Error fetching labels.')); + }); }, renderRow(label) { const active = boardsStore.findListByLabelId(label.id); diff --git a/app/assets/javascripts/boards/index.js b/app/assets/javascripts/boards/index.js index 3bded4a3258b7266236979e087172546b6792eaf..da2669e7cde89640d96a1459d5e0c66674d3773c 100644 --- a/app/assets/javascripts/boards/index.js +++ b/app/assets/javascripts/boards/index.js @@ -22,7 +22,6 @@ import Board from 'ee_else_ce/boards/components/board'; import BoardSidebar from 'ee_else_ce/boards/components/board_sidebar'; import initNewListDropdown from 'ee_else_ce/boards/components/new_list_dropdown'; import BoardAddIssuesModal from '~/boards/components/modal/index.vue'; -import '~/vue_shared/vue_resource_interceptor'; import { NavigationType, convertObjectPropsToCamelCase, diff --git a/app/assets/javascripts/boards/models/issue.js b/app/assets/javascripts/boards/models/issue.js index 086340105b7b3a2a7e6e12a0b7f9d522ff616039..1cee9e5725abf03466ff82639afa7d73263ebc99 100644 --- a/app/assets/javascripts/boards/models/issue.js +++ b/app/assets/javascripts/boards/models/issue.js @@ -11,11 +11,6 @@ import boardsStore from '../stores/boards_store'; class ListIssue { constructor(obj, defaultAvatar) { - this.id = obj.id; - this.iid = obj.iid; - this.title = obj.title; - this.confidential = obj.confidential; - this.dueDate = obj.due_date; this.subscribed = obj.subscribed; this.labels = []; this.assignees = []; @@ -25,6 +20,16 @@ class ListIssue { subscriptions: true, }; this.isLoading = {}; + + this.refreshData(obj, defaultAvatar); + } + + refreshData(obj, defaultAvatar) { + this.id = obj.id; + this.iid = obj.iid; + this.title = obj.title; + this.confidential = obj.confidential; + this.dueDate = obj.due_date; this.sidebarInfoEndpoint = obj.issue_sidebar_endpoint; this.referencePath = obj.reference_path; this.path = obj.real_path; @@ -42,11 +47,13 @@ class ListIssue { this.milestone_id = obj.milestone.id; } - obj.labels.forEach(label => { - this.labels.push(new ListLabel(label)); - }); + if (obj.labels) { + this.labels = obj.labels.map(label => new ListLabel(label)); + } - this.assignees = obj.assignees.map(a => new ListAssignee(a, defaultAvatar)); + if (obj.assignees) { + this.assignees = obj.assignees.map(a => new ListAssignee(a, defaultAvatar)); + } } addLabel(label) { diff --git a/app/assets/javascripts/boards/models/list.js b/app/assets/javascripts/boards/models/list.js index 080841ee82ba99940c3f9a7ccf27ff0c5a77e2f4..b3e56a34c28fab5adb6e972a44ecd87cc98bfbdd 100644 --- a/app/assets/javascripts/boards/models/list.js +++ b/app/assets/javascripts/boards/models/list.js @@ -1,9 +1,9 @@ -/* eslint-disable no-underscore-dangle, class-methods-use-this, consistent-return, no-shadow, no-param-reassign */ +/* eslint-disable no-underscore-dangle, class-methods-use-this, consistent-return, no-shadow */ import { __ } from '~/locale'; import ListLabel from './label'; import ListAssignee from './assignee'; -import ListIssue from './issue'; +import ListIssue from 'ee_else_ce/boards/models/issue'; import { urlParamsToObject } from '~/lib/utils/common_utils'; import boardsStore from '../stores/boards_store'; import ListMilestone from './milestone'; @@ -45,7 +45,7 @@ class List { const typeInfo = this.getTypeInfo(this.type); this.preset = Boolean(typeInfo.isPreset); this.isExpandable = Boolean(typeInfo.isExpandable); - this.isExpanded = true; + this.isExpanded = !obj.collapsed; this.page = 1; this.loading = true; this.loadingMore = false; @@ -113,7 +113,8 @@ class List { } update() { - gl.boardService.updateList(this.id, this.position).catch(() => { + const collapsed = !this.isExpanded; + return gl.boardService.updateList(this.id, this.position, collapsed).catch(() => { // TODO: handle request error }); } @@ -259,12 +260,7 @@ class List { } onNewIssueResponse(issue, data) { - issue.id = data.id; - issue.iid = data.iid; - issue.project = data.project; - issue.path = data.real_path; - issue.referencePath = data.reference_path; - issue.assignableLabelsEndpoint = data.assignable_labels_endpoint; + issue.refreshData(data); if (this.issuesSize > 1) { const moveBeforeId = this.issues[1].id; diff --git a/app/assets/javascripts/boards/services/board_service.js b/app/assets/javascripts/boards/services/board_service.js index 56a6cab6c73df804b6641a2a66343d7533fdefe4..0d11db895111e9419014cdc0dc3f711b92100859 100644 --- a/app/assets/javascripts/boards/services/board_service.js +++ b/app/assets/javascripts/boards/services/board_service.js @@ -2,7 +2,7 @@ /** * This file is intended to be deleted. * The existing functions will removed one by one in favor of using the board store directly. - * see https://gitlab.com/gitlab-org/gitlab-ce/issues/61621 + * see https://gitlab.com/gitlab-org/gitlab-foss/issues/61621 */ import boardsStore from '~/boards/stores/boards_store'; @@ -32,8 +32,8 @@ export default class BoardService { return boardsStore.createList(entityId, entityType); } - updateList(id, position) { - return boardsStore.updateList(id, position); + updateList(id, position, collapsed) { + return boardsStore.updateList(id, position, collapsed); } destroyList(id) { diff --git a/app/assets/javascripts/boards/stores/boards_store.js b/app/assets/javascripts/boards/stores/boards_store.js index f57c684691cab153b726bb1f7fc24c44679ed126..6da1cca96289cea244ac37665020d2c793c41fe6 100644 --- a/app/assets/javascripts/boards/stores/boards_store.js +++ b/app/assets/javascripts/boards/stores/boards_store.js @@ -82,7 +82,7 @@ const boardsStore = { this.state.lists = _.sortBy(this.state.lists, 'position'); }) .catch(() => { - // https://gitlab.com/gitlab-org/gitlab-ce/issues/30821 + // https://gitlab.com/gitlab-org/gitlab-foss/issues/30821 }); this.removeBlankState(); }, @@ -278,10 +278,11 @@ const boardsStore = { }); }, - updateList(id, position) { + updateList(id, position, collapsed) { return axios.put(`${this.state.endpoints.listsEndpoint}/${id}`, { list: { position, + collapsed, }, }); }, diff --git a/app/assets/javascripts/boards/stores/boards_store_ee.js b/app/assets/javascripts/boards/stores/boards_store_ee.js index 09e3a938fbe8a03efa993768b018b0bdd9c7da72..2a289ce5d0afecdb466595194a9ada57e1dcb66d 100644 --- a/app/assets/javascripts/boards/stores/boards_store_ee.js +++ b/app/assets/javascripts/boards/stores/boards_store_ee.js @@ -1,4 +1,4 @@ -// this is just to make ee_else_ce happy and will be cleaned up in https://gitlab.com/gitlab-org/gitlab-ce/issues/59807 +// this is just to make ee_else_ce happy and will be cleaned up in https://gitlab.com/gitlab-org/gitlab-foss/issues/59807 export default { initEESpecific() {}, diff --git a/app/assets/javascripts/build_artifacts.js b/app/assets/javascripts/build_artifacts.js index b2c88e8c14ec8221c64156db25975e22afa85067..2955f0f014b162d945fa449eabbe7073c28e2839 100644 --- a/app/assets/javascripts/build_artifacts.js +++ b/app/assets/javascripts/build_artifacts.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, prefer-arrow-callback */ +/* eslint-disable func-names */ import $ from 'jquery'; import { visitUrl } from './lib/utils/url_utility'; @@ -12,11 +12,11 @@ export default class BuildArtifacts { } // eslint-disable-next-line class-methods-use-this disablePropagation() { - $('.top-block').on('click', '.download', function(e) { - return e.stopPropagation(); + $('.top-block').on('click', '.download', e => { + e.stopPropagation(); }); - return $('.tree-holder').on('click', 'tr[data-link] a', function(e) { - return e.stopImmediatePropagation(); + return $('.tree-holder').on('click', 'tr[data-link] a', e => { + e.stopImmediatePropagation(); }); } // eslint-disable-next-line class-methods-use-this diff --git a/app/assets/javascripts/ci_variable_list/ci_variable_list.js b/app/assets/javascripts/ci_variable_list/ci_variable_list.js index 0303e4e51ddda841cc25b053e6fa2602736493e9..5c79f245f6d6000599c0b497a8ade4fe057f5120 100644 --- a/app/assets/javascripts/ci_variable_list/ci_variable_list.js +++ b/app/assets/javascripts/ci_variable_list/ci_variable_list.js @@ -54,7 +54,7 @@ export default class VariableList { environment_scope: { // We can't use a `.js-` class here because // gl_dropdown replaces the and doesn't copy over the class - // See https://gitlab.com/gitlab-org/gitlab-ce/issues/42458 + // See https://gitlab.com/gitlab-org/gitlab-foss/issues/42458 selector: `input[name="${this.formField}[variables_attributes][][environment_scope]"]`, default: '*', }, diff --git a/app/assets/javascripts/clusters/clusters_bundle.js b/app/assets/javascripts/clusters/clusters_bundle.js index 1f213d5aaf2b5353a01083ca472e1ff67a6ae858..7ea8901ecbb7ab4fa88c6db51b2798fe824d034b 100644 --- a/app/assets/javascripts/clusters/clusters_bundle.js +++ b/app/assets/javascripts/clusters/clusters_bundle.js @@ -39,7 +39,10 @@ export default class Clusters { updateKnativePath, installPrometheusPath, managePrometheusPath, + clusterEnvironmentsPath, hasRbac, + providerType, + preInstalledKnative, clusterType, clusterStatus, clusterStatusReason, @@ -49,6 +52,7 @@ export default class Clusters { environmentsHelpPath, clustersHelpPath, deployBoardsHelpPath, + cloudRunHelpPath, clusterId, } = document.querySelector('.js-edit-cluster-form').dataset; @@ -64,10 +68,13 @@ export default class Clusters { environmentsHelpPath, clustersHelpPath, deployBoardsHelpPath, + cloudRunHelpPath, ); this.store.setManagePrometheusPath(managePrometheusPath); this.store.updateStatus(clusterStatus); this.store.updateStatusReason(clusterStatusReason); + this.store.updateProviderType(providerType); + this.store.updatePreInstalledKnative(preInstalledKnative); this.store.updateRbac(hasRbac); this.service = new ClustersService({ endpoint: statusPath, @@ -79,6 +86,7 @@ export default class Clusters { installJupyterEndpoint: installJupyterPath, installKnativeEndpoint: installKnativePath, updateKnativeEndpoint: updateKnativePath, + clusterEnvironmentsEndpoint: clusterEnvironmentsPath, }); this.installApplication = this.installApplication.bind(this); @@ -109,11 +117,25 @@ export default class Clusters { this.initApplications(clusterType); this.initEnvironments(); + if (clusterEnvironmentsPath && this.environments) { + this.store.toggleFetchEnvironments(true); + + this.initPolling( + 'fetchClusterEnvironments', + data => this.handleClusterEnvironmentsSuccess(data), + () => this.handleEnvironmentsPollError(), + ); + } + this.updateContainer(null, this.store.state.status, this.store.state.statusReason); this.addListeners(); if (statusPath && !this.environments) { - this.initPolling(); + this.initPolling( + 'fetchClusterStatus', + data => this.handleClusterStatusSuccess(data), + () => this.handlePollError(), + ); } } @@ -137,6 +159,9 @@ export default class Clusters { ingressHelpPath: this.state.ingressHelpPath, managePrometheusPath: this.state.managePrometheusPath, ingressDnsHelpPath: this.state.ingressDnsHelpPath, + cloudRunHelpPath: this.state.cloudRunHelpPath, + providerType: this.state.providerType, + preInstalledKnative: this.state.preInstalledKnative, rbac: this.state.rbac, }, }); @@ -162,6 +187,7 @@ export default class Clusters { render(createElement) { return createElement(Environments, { props: { + isFetching: this.state.fetchingEnvironments, environments: this.state.environments, environmentsHelpPath: this.state.environmentsHelpPath, clustersHelpPath: this.state.clustersHelpPath, @@ -172,6 +198,11 @@ export default class Clusters { }); } + handleClusterEnvironmentsSuccess(data) { + this.store.toggleFetchEnvironments(false); + this.store.updateEnvironments(data.data); + } + static initDismissableCallout() { const callout = document.querySelector('.js-cluster-security-warning'); PersistentUserCallout.factory(callout); @@ -205,21 +236,16 @@ export default class Clusters { eventHub.$off('uninstallApplication'); } - initPolling() { + initPolling(method, successCallback, errorCallback) { this.poll = new Poll({ resource: this.service, - method: 'fetchData', - successCallback: data => this.handleSuccess(data), - errorCallback: () => Clusters.handleError(), + method, + successCallback, + errorCallback, }); if (!Visibility.hidden()) { this.poll.makeRequest(); - } else { - this.service - .fetchData() - .then(data => this.handleSuccess(data)) - .catch(() => Clusters.handleError()); } Visibility.change(() => { @@ -231,11 +257,21 @@ export default class Clusters { }); } + handlePollError() { + this.constructor.handleError(); + } + + handleEnvironmentsPollError() { + this.store.toggleFetchEnvironments(false); + + this.handlePollError(); + } + static handleError() { Flash(s__('ClusterIntegration|Something went wrong on our end.')); } - handleSuccess(data) { + handleClusterStatusSuccess(data) { const prevStatus = this.store.state.status; const prevApplicationMap = Object.assign({}, this.store.state.applications); diff --git a/app/assets/javascripts/clusters/components/application_row.vue b/app/assets/javascripts/clusters/components/application_row.vue index 64364092016d6f92f719e6a1886411e359eecd44..c6c8dc6352c4f087696dbb0b45c9c2f83a9f8367 100644 --- a/app/assets/javascripts/clusters/components/application_row.vue +++ b/app/assets/javascripts/clusters/components/application_row.vue @@ -78,6 +78,10 @@ export default { required: false, default: false, }, + installedVia: { + type: String, + required: false, + }, version: { type: String, required: false, @@ -311,6 +315,11 @@ export default { > {{ title }} +

diff --git a/app/assets/javascripts/clusters/components/applications.vue b/app/assets/javascripts/clusters/components/applications.vue index 27959898fb79491920302a59faf8381b743f82f8..4d3e759d8d4857f4ee212bef1d9b20dce7d7a698 100644 --- a/app/assets/javascripts/clusters/components/applications.vue +++ b/app/assets/javascripts/clusters/components/applications.vue @@ -16,7 +16,7 @@ import { s__, sprintf } from '../../locale'; import applicationRow from './application_row.vue'; import clipboardButton from '../../vue_shared/components/clipboard_button.vue'; import KnativeDomainEditor from './knative_domain_editor.vue'; -import { CLUSTER_TYPE, APPLICATION_STATUS, INGRESS } from '../constants'; +import { CLUSTER_TYPE, PROVIDER_TYPE, APPLICATION_STATUS, INGRESS } from '../constants'; import LoadingButton from '~/vue_shared/components/loading_button.vue'; import eventHub from '~/clusters/event_hub'; @@ -54,11 +54,26 @@ export default { required: false, default: '', }, + cloudRunHelpPath: { + type: String, + required: false, + default: '', + }, managePrometheusPath: { type: String, required: false, default: '', }, + providerType: { + type: String, + required: false, + default: '', + }, + preInstalledKnative: { + type: Boolean, + required: false, + default: false, + }, rbac: { type: Boolean, required: false, @@ -156,6 +171,25 @@ export default { knative() { return this.applications.knative; }, + cloudRun() { + return this.providerType === PROVIDER_TYPE.GCP && this.preInstalledKnative; + }, + installedVia() { + if (this.cloudRun) { + return sprintf( + _.escape(s__(`ClusterIntegration|installed via %{installed_via}`)), + { + installed_via: `${_.escape( + s__('ClusterIntegration|Cloud Run'), + )}`, + }, + false, + ); + } + return null; + }, }, created() { this.helmInstallIllustration = helmInstallIllustration; @@ -468,6 +502,7 @@ export default { :installed="applications.knative.installed" :install-failed="applications.knative.installFailed" :install-application-request-params="{ hostname: applications.knative.hostname }" + :installed-via="installedVia" :uninstallable="applications.knative.uninstallable" :uninstall-successful="applications.knative.uninstallSuccessful" :uninstall-failed="applications.knative.uninstallFailed" @@ -499,7 +534,7 @@ export default {

gitlab-managed-apps', + }, + false, ), [INGRESS]: s__( 'ClusterIntegration|The associated load balancer and IP will be deleted and cannot be restored.', @@ -76,6 +82,7 @@ export default { :modal-id="modalId" :title="title" @ok="confirmUninstall()" - >{{ warningText }} {{ customAppWarningText }} + {{ warningText }} + diff --git a/app/assets/javascripts/clusters/constants.js b/app/assets/javascripts/clusters/constants.js index 8fd752092c982e7f3103917894ac9396054afe94..c6e4b7951cf90b0c6b05303bc3bae354471a1ee6 100644 --- a/app/assets/javascripts/clusters/constants.js +++ b/app/assets/javascripts/clusters/constants.js @@ -5,6 +5,11 @@ export const CLUSTER_TYPE = { PROJECT: 'project_type', }; +// These need to match the available providers in app/models/clusters/providers/ +export const PROVIDER_TYPE = { + GCP: 'gcp', +}; + // These need to match what is returned from the server export const APPLICATION_STATUS = { NO_STATUS: null, @@ -19,6 +24,7 @@ export const APPLICATION_STATUS = { UNINSTALLING: 'uninstalling', UNINSTALL_ERRORED: 'uninstall_errored', ERROR: 'errored', + PRE_INSTALLED: 'pre_installed', }; /* @@ -29,6 +35,7 @@ export const APPLICATION_INSTALLED_STATUSES = [ APPLICATION_STATUS.INSTALLED, APPLICATION_STATUS.UPDATING, APPLICATION_STATUS.UNINSTALLING, + APPLICATION_STATUS.PRE_INSTALLED, ]; // These are only used client-side diff --git a/app/assets/javascripts/clusters/services/application_state_machine.js b/app/assets/javascripts/clusters/services/application_state_machine.js index 6e632519d8a2b28979cee0df1aeb8ed8e6c18cdc..6bc4be7b93ae0d73d7144aea8bf0bbf636b82492 100644 --- a/app/assets/javascripts/clusters/services/application_state_machine.js +++ b/app/assets/javascripts/clusters/services/application_state_machine.js @@ -13,6 +13,7 @@ const { UPDATE_ERRORED, UNINSTALLING, UNINSTALL_ERRORED, + PRE_INSTALLED, } = APPLICATION_STATUS; const applicationStateMachine = { @@ -63,6 +64,9 @@ const applicationStateMachine = { uninstallFailed: true, }, }, + [PRE_INSTALLED]: { + target: PRE_INSTALLED, + }, }, }, [NOT_INSTALLABLE]: { @@ -123,6 +127,27 @@ const applicationStateMachine = { }, }, }, + [PRE_INSTALLED]: { + on: { + [UPDATE_EVENT]: { + target: UPDATING, + effects: { + updateFailed: false, + updateSuccessful: false, + }, + }, + [NOT_INSTALLABLE]: { + target: NOT_INSTALLABLE, + }, + [UNINSTALL_EVENT]: { + target: UNINSTALLING, + effects: { + uninstallFailed: false, + uninstallSuccessful: false, + }, + }, + }, + }, [UPDATING]: { on: { [UPDATED]: { diff --git a/app/assets/javascripts/clusters/services/clusters_service.js b/app/assets/javascripts/clusters/services/clusters_service.js index 01f3732de7eb41836d0b4c9c97cfbb8bf170f294..fa12802b3de182cdc8f486065d5c883af4bd6b3d 100644 --- a/app/assets/javascripts/clusters/services/clusters_service.js +++ b/app/assets/javascripts/clusters/services/clusters_service.js @@ -17,7 +17,7 @@ export default class ClusterService { }; } - fetchData() { + fetchClusterStatus() { return axios.get(this.options.endpoint); } @@ -33,6 +33,10 @@ export default class ClusterService { return axios.delete(this.appInstallEndpointMap[appId], params); } + fetchClusterEnvironments() { + return axios.get(this.options.clusterEnvironmentsEndpoint); + } + static updateCluster(endpoint, data) { return axios.put(endpoint, data); } diff --git a/app/assets/javascripts/clusters/stores/clusters_store.js b/app/assets/javascripts/clusters/stores/clusters_store.js index 83533c88f69b090588f8950039107249432450bb..6464461ea0c2736ee6beae3bf2f3b7c1f4704205 100644 --- a/app/assets/javascripts/clusters/stores/clusters_store.js +++ b/app/assets/javascripts/clusters/stores/clusters_store.js @@ -35,7 +35,10 @@ export default class ClusterStore { environmentsHelpPath: null, clustersHelpPath: null, deployBoardsHelpPath: null, + cloudRunHelpPath: null, status: null, + providerType: null, + preInstalledKnative: false, rbac: false, statusReason: null, applications: { @@ -84,6 +87,7 @@ export default class ClusterStore { }, }, environments: [], + fetchingEnvironments: false, }; } @@ -94,6 +98,7 @@ export default class ClusterStore { environmentsHelpPath, clustersHelpPath, deployBoardsHelpPath, + cloudRunHelpPath, ) { this.state.helpPath = helpPath; this.state.ingressHelpPath = ingressHelpPath; @@ -101,6 +106,7 @@ export default class ClusterStore { this.state.environmentsHelpPath = environmentsHelpPath; this.state.clustersHelpPath = clustersHelpPath; this.state.deployBoardsHelpPath = deployBoardsHelpPath; + this.state.cloudRunHelpPath = cloudRunHelpPath; } setManagePrometheusPath(managePrometheusPath) { @@ -111,6 +117,14 @@ export default class ClusterStore { this.state.status = status; } + updateProviderType(providerType) { + this.state.providerType = providerType; + } + + updatePreInstalledKnative(preInstalledKnative) { + this.state.preInstalledKnative = parseBoolean(preInstalledKnative); + } + updateRbac(rbac) { this.state.rbac = parseBoolean(rbac); } @@ -206,6 +220,10 @@ export default class ClusterStore { }); } + toggleFetchEnvironments(isFetching) { + this.state.fetchingEnvironments = isFetching; + } + updateEnvironments(environments = []) { this.state.environments = environments.map(environment => ({ name: environment.name, @@ -213,9 +231,10 @@ export default class ClusterStore { environmentPath: environment.environment_path, lastDeployment: environment.last_deployment, rolloutStatus: { + status: environment.rollout_status ? environment.rollout_status.status : null, instances: environment.rollout_status ? environment.rollout_status.instances : [], }, - updatedAt: environment.updatedAt, + updatedAt: environment.updated_at, })); } } diff --git a/app/assets/javascripts/commit/image_file.js b/app/assets/javascripts/commit/image_file.js index bc666aef54bb9c00751068465dad2de0b87c064a..6c04e0beb4d63c79c304e6f885928633a2cac168 100644 --- a/app/assets/javascripts/commit/image_file.js +++ b/app/assets/javascripts/commit/image_file.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, no-var, prefer-arrow-callback, no-else-return, consistent-return, prefer-template, one-var, no-unused-vars, no-return-assign, no-unused-expressions, no-sequences */ +/* eslint-disable func-names, no-var, no-else-return, consistent-return, one-var, no-return-assign, no-unused-expressions, no-sequences */ import $ from 'jquery'; @@ -12,18 +12,15 @@ export default class ImageFile { this.requestImageInfo( $('.two-up.view .frame.deleted img', this.file), (function(_this) { - return function(deletedWidth, deletedHeight) { - return _this.requestImageInfo($('.two-up.view .frame.added img', _this.file), function( - width, - height, - ) { + return function() { + return _this.requestImageInfo($('.two-up.view .frame.added img', _this.file), () => { _this.initViewModes(); // Load two-up view after images are loaded // so that we can display the correct width and height information const $images = $('.two-up.view img', _this.file); - $images.waitForImages(function() { + $images.waitForImages(() => { _this.initView('two-up'); }); }); @@ -52,13 +49,13 @@ export default class ImageFile { activateViewMode(viewMode) { $('.view-modes-menu li', this.file) .removeClass('active') - .filter('.' + viewMode) + .filter(`.${viewMode}`) .addClass('active'); - return $('.view:visible:not(.' + viewMode + ')', this.file).fadeOut( + return $(`.view:visible:not(.${viewMode})`, this.file).fadeOut( 200, (function(_this) { return function() { - $('.view.' + viewMode, _this.file).fadeIn(200); + $(`.view.${viewMode}`, _this.file).fadeIn(200); return _this.initView(viewMode); }; })(this), @@ -112,7 +109,7 @@ export default class ImageFile { maxHeight = 0; $('.frame', view) .each( - (function(_this) { + (function() { return function(index, frame) { var height, width; width = $(frame).width(); @@ -141,9 +138,9 @@ export default class ImageFile { return $(this).width(availWidth / 2); } }); - return _this.requestImageInfo($('img', wrap), function(width, height) { - $('.image-info .meta-width', wrap).text(width + 'px'); - $('.image-info .meta-height', wrap).text(height + 'px'); + return _this.requestImageInfo($('img', wrap), (width, height) => { + $('.image-info .meta-width', wrap).text(`${width}px`); + $('.image-info .meta-height', wrap).text(`${height}px`); return $('.image-info', wrap).removeClass('hide'); }); }; @@ -178,7 +175,7 @@ export default class ImageFile { wrapPadding = parseInt($swipeWrap.css('right').replace('px', ''), 10); - _this.initDraggable($swipeBar, wrapPadding, function(e, left) { + _this.initDraggable($swipeBar, wrapPadding, (e, left) => { if (left > 0 && left < $swipeFrame.width() - wrapPadding * 2) { $swipeWrap.width(maxWidth + 1 - left); $swipeBar.css('left', left); @@ -196,13 +193,7 @@ export default class ImageFile { return $('.onion-skin.view', this.file).each( (function(_this) { return function(index, view) { - var $frame, - $track, - $dragger, - $frameAdded, - framePadding, - ref, - dragging = false; + var $frame, $track, $dragger, $frameAdded, framePadding, ref; (ref = _this.prepareFrames(view)), ([maxWidth, maxHeight] = ref); $frame = $('.onion-skin-frame', view); $frameAdded = $('.frame.added', view); @@ -224,7 +215,7 @@ export default class ImageFile { $frameAdded.css('opacity', 1); framePadding = parseInt($frameAdded.css('right').replace('px', ''), 10); - _this.initDraggable($dragger, framePadding, function(e, left) { + _this.initDraggable($dragger, framePadding, (e, left) => { var opacity = left / dragTrackWidth; if (opacity >= 0 && opacity <= 1) { diff --git a/app/assets/javascripts/commons/vue.js b/app/assets/javascripts/commons/vue.js index 798623b94fb9b8d007e6d71d88a17f4977479d25..5b5a1507d38153c3a9ff059048e1d739c12a5530 100644 --- a/app/assets/javascripts/commons/vue.js +++ b/app/assets/javascripts/commons/vue.js @@ -1,6 +1,8 @@ import Vue from 'vue'; -import '../vue_shared/vue_resource_interceptor'; +import GlFeatureFlagsPlugin from '~/vue_shared/gl_feature_flags_plugin'; if (process.env.NODE_ENV !== 'production') { Vue.config.productionTip = false; } + +Vue.use(GlFeatureFlagsPlugin); diff --git a/app/assets/javascripts/compare_autocomplete.js b/app/assets/javascripts/compare_autocomplete.js index 5bfe158ceda923984163f66a75eeb079760bfbe0..81ba15577fbe7bb378446bd86be57a470b634e20 100644 --- a/app/assets/javascripts/compare_autocomplete.js +++ b/app/assets/javascripts/compare_autocomplete.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, one-var, no-var, object-shorthand, no-else-return */ +/* eslint-disable func-names, one-var, no-var, no-else-return */ import $ from 'jquery'; import { __ } from './locale'; @@ -15,7 +15,7 @@ export default function initCompareAutocomplete(limitTo = null, clickHandler = ( const $fieldInput = $(`input[name="${$dropdown.data('fieldName')}"]`, $dropdownContainer); const $filterInput = $('input[type="search"]', $dropdownContainer); $dropdown.glDropdown({ - data: function(term, callback) { + data(term, callback) { const params = { ref: $dropdown.data('ref'), search: term, @@ -43,7 +43,7 @@ export default function initCompareAutocomplete(limitTo = null, clickHandler = ( filterRemote: Boolean($dropdown.data('refsUrl')), fieldName: $dropdown.data('fieldName'), filterInput: 'input[type="search"]', - renderRow: function(ref) { + renderRow(ref) { var link; if (ref.header != null) { return $('
  • ') @@ -58,10 +58,10 @@ export default function initCompareAutocomplete(limitTo = null, clickHandler = ( return $('
  • ').append(link); } }, - id: function(obj, $el) { + id(obj, $el) { return $el.attr('data-ref'); }, - toggleLabel: function(obj, $el) { + toggleLabel(obj, $el) { return $el.text().trim(); }, clicked: () => clickHandler($dropdown), diff --git a/app/assets/javascripts/contextual_sidebar.js b/app/assets/javascripts/contextual_sidebar.js index 9263e9b27e42181c3c442591500451f1e53100f1..f43b6f3d777f760cb42dc281b66e5a8df03e4b34 100644 --- a/app/assets/javascripts/contextual_sidebar.js +++ b/app/assets/javascripts/contextual_sidebar.js @@ -5,7 +5,7 @@ import bp from './breakpoints'; import { parseBoolean } from '~/lib/utils/common_utils'; // NOTE: at 1200px nav sidebar should not overlap the content -// https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/24555#note_134136110 +// https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/24555#note_134136110 const NAV_SIDEBAR_BREAKPOINT = 1200; export const SIDEBAR_COLLAPSED_CLASS = 'js-sidebar-collapsed'; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue new file mode 100644 index 0000000000000000000000000000000000000000..f9465da6fda74353559fc934f04c6547945086c4 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue @@ -0,0 +1,182 @@ + + + diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue index 1ec45c8b6518887a25014ec5deff28e55ed9cf35..7ed51068d42715373ff6ea48a19d4df8ca98f146 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue @@ -1,18 +1,61 @@ diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/region_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/region_dropdown.vue new file mode 100644 index 0000000000000000000000000000000000000000..765955305c8a9d54084b0893bbe738935e770b42 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/region_dropdown.vue @@ -0,0 +1,63 @@ + + diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..70230b294ac1f77122d35b1f42cae747355f13e3 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue @@ -0,0 +1,53 @@ + + diff --git a/app/assets/javascripts/create_cluster/eks_cluster/index.js b/app/assets/javascripts/create_cluster/eks_cluster/index.js index c62e5ec101dacb7c053e2be2aae9480fc0183813..9365fc41f4ccbe1c540646e83f15b3dca2e72189 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/index.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/index.js @@ -12,7 +12,6 @@ export default () => components: { CreateEksCluster, }, - data() {}, render(createElement) { return createElement('create-eks-cluster'); }, diff --git a/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js b/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5a13d32e0d26900ec5be27c05ec8cada9624a2a9 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js @@ -0,0 +1,20 @@ +import EC2 from 'aws-sdk/clients/ec2'; + +export const fetchRegions = () => + new Promise((resolve, reject) => { + const ec2 = new EC2(); + + ec2 + .describeRegions() + .on('success', ({ data: { Regions: regions } }) => { + const transformedRegions = regions.map(({ RegionName: name }) => ({ name })); + + resolve(transformedRegions); + }) + .on('error', error => { + reject(error); + }) + .send(); + }); + +export default () => {}; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js b/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js index 861bcddfcc75edbb8504bc5c792e83440593ae5f..68493be37e016dfd67eb4c35793703a499c87536 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/actions.js @@ -1,3 +1,7 @@ -// import awsServices from '../services/aws_services_facade'; +import * as types from './mutation_types'; + +export const setRegion = ({ commit }, payload) => { + commit(types.SET_REGION, payload); +}; export default () => {}; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/actions.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/actions.js new file mode 100644 index 0000000000000000000000000000000000000000..4f1ecb227192ec528878a757259cf4cc491045e5 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/actions.js @@ -0,0 +1,14 @@ +import * as types from './mutation_types'; + +export default fetchItems => ({ + requestItems: ({ commit }) => commit(types.REQUEST_ITEMS), + receiveItemsSuccess: ({ commit }, payload) => commit(types.RECEIVE_ITEMS_SUCCESS, payload), + receiveItemsError: ({ commit }, payload) => commit(types.RECEIVE_ITEMS_ERROR, payload), + fetchItems: ({ dispatch }) => { + dispatch('requestItems'); + + return fetchItems() + .then(items => dispatch('receiveItemsSuccess', { items })) + .catch(error => dispatch('receiveItemsError', { error })); + }, +}); diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/getters.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/getters.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/index.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/index.js new file mode 100644 index 0000000000000000000000000000000000000000..07a5821c47dfd001745a569f860012d14515689c --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/index.js @@ -0,0 +1,13 @@ +import * as getters from './getters'; +import actions from './actions'; +import mutations from './mutations'; +import state from './state'; + +const createStore = fetchFn => ({ + actions: actions(fetchFn), + getters, + mutations, + state: state(), +}); + +export default createStore; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types.js new file mode 100644 index 0000000000000000000000000000000000000000..48959a73924a85e1b4a626a2d62f44b1b150d9a4 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutation_types.js @@ -0,0 +1,3 @@ +export const REQUEST_ITEMS = 'REQUEST_ITEMS'; +export const RECEIVE_ITEMS_SUCCESS = 'REQUEST_ITEMS_SUCCESS'; +export const RECEIVE_ITEMS_ERROR = 'RECEIVE_ITEMS_ERROR'; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutations.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutations.js new file mode 100644 index 0000000000000000000000000000000000000000..d09689f1f6c3214d8cf71579277e7369fa446771 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/mutations.js @@ -0,0 +1,16 @@ +import * as types from './mutation_types'; + +export default { + [types.REQUEST_ITEMS](state) { + state.isLoadingItems = true; + state.loadingItemsError = null; + }, + [types.RECEIVE_ITEMS_SUCCESS](state, { items }) { + state.isLoadingItems = false; + state.items = items; + }, + [types.RECEIVE_ITEMS_ERROR](state, { error }) { + state.isLoadingItems = false; + state.loadingItemsError = error; + }, +}; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/state.js b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/state.js new file mode 100644 index 0000000000000000000000000000000000000000..b949a24216ee1c12be80b393e62245288af9df69 --- /dev/null +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/cluster_dropdown/state.js @@ -0,0 +1,5 @@ +export default () => ({ + isLoadingItems: false, + items: [], + loadingItemsError: null, +}); diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/index.js b/app/assets/javascripts/create_cluster/eks_cluster/store/index.js index 99e9e35fd1a7f8f91633205699fe74526b2f8f47..608c4ec9e1ebae90586353f697419fa645191b4d 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/index.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/index.js @@ -4,12 +4,22 @@ import * as getters from './getters'; import mutations from './mutations'; import state from './state'; +import clusterDropdownStore from './cluster_dropdown'; + +import * as awsServices from '../services/aws_services_facade'; + const createStore = () => new Vuex.Store({ actions, getters, mutations, - state, + state: state(), + modules: { + regions: { + namespaced: true, + ...clusterDropdownStore(awsServices.fetchRegions), + }, + }, }); export default createStore; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js b/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..80c1354482b5402349dba28d77fbaa96709b065e 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line import/prefer-default-export +export const SET_REGION = 'SET_REGION'; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js b/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..02f34d1bdcd938f1e6bae3dd2290afbf673a669f 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js @@ -0,0 +1,7 @@ +import * as types from './mutation_types'; + +export default { + [types.SET_REGION](state, { region }) { + state.selectedRegion = region; + }, +}; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/store/state.js b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js index 9754ccfeeaf6cb79733758b658a203a0fa882267..84880e15d9c4b7bf7316b9ba4b83b86a91347124 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/store/state.js +++ b/app/assets/javascripts/create_cluster/eks_cluster/store/state.js @@ -2,18 +2,9 @@ export default () => ({ isValidatingCredentials: false, validCredentials: false, - isLoadingRoles: false, - isLoadingVPCs: false, - isLoadingSubnets: false, - isLoadingSecurityGroups: false, - - roles: [], - vpcs: [], - subnets: [], - securityGroups: [], - + selectedRegion: '', selectedRole: '', - selectedVPC: '', + selectedVpc: '', selectedSubnet: '', selectedSecurityGroup: '', }); diff --git a/app/assets/javascripts/create_item_dropdown.js b/app/assets/javascripts/create_item_dropdown.js index fa0f04c7d8274c5aff623b390ac61473c1dafeb4..95b890b04c121756207500ae639f54f15e134a10 100644 --- a/app/assets/javascripts/create_item_dropdown.js +++ b/app/assets/javascripts/create_item_dropdown.js @@ -1,4 +1,5 @@ import _ from 'underscore'; +import '~/gl_dropdown'; export default class CreateItemDropdown { /** diff --git a/app/assets/javascripts/create_label.js b/app/assets/javascripts/create_label.js index eac0e37bcaad5a0913c7587c3b10d72a015ee8e8..9c0ed7f79d4b54200e1703e39f2c62d2ebc8933a 100644 --- a/app/assets/javascripts/create_label.js +++ b/app/assets/javascripts/create_label.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, prefer-arrow-callback */ +/* eslint-disable func-names */ import $ from 'jquery'; import Api from './api'; @@ -50,7 +50,7 @@ export default class CreateLabelDropdown { this.$dropdownBack.on('click', this.resetForm.bind(this)); - this.$cancelButton.on('click', function(e) { + this.$cancelButton.on('click', e => { e.preventDefault(); e.stopPropagation(); diff --git a/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue index 333ea111cd6967c4653d313b4dc23ba36e1054b5..55e5f4ffad277e157f2a0815b867b2c09516725a 100644 --- a/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue +++ b/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue @@ -32,7 +32,7 @@ export default {
    -
    +
    {{ mergeRequest.title }}
    !{{ mergeRequest.iid }} · diff --git a/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue index f874f11aff043cdd7d5295b3ed120c18c75818c9..a295c8b496b38aad69b0d09490c2b506be748822 100644 --- a/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue +++ b/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue @@ -34,7 +34,7 @@ export default {
    -
    +
    {{ mergeRequest.title }}
    !{{ mergeRequest.iid }} · diff --git a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js index c9a6b10b2f37adff6657c8e7978498f25cd0a60d..cd67ba5fab8201c68cedc83f21eff1d35ed6b304 100644 --- a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js +++ b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js @@ -3,7 +3,6 @@ import Vue from 'vue'; import Cookies from 'js-cookie'; import { GlEmptyState } from '@gitlab/ui'; import filterMixins from 'ee_else_ce/analytics/cycle_analytics/mixins/filter_mixins'; -import addStageMixin from 'ee_else_ce/analytics/cycle_analytics/mixins/add_stage_mixin'; import Flash from '../flash'; import { __ } from '~/locale'; import Translate from '../vue_shared/translate'; @@ -44,12 +43,8 @@ export default () => { DateRangeDropdown: () => import('ee_component/analytics/shared/components/date_range_dropdown.vue'), 'stage-nav-item': stageNavItem, - CustomStageForm: () => - import('ee_component/analytics/cycle_analytics/components/custom_stage_form.vue'), - AddStageButton: () => - import('ee_component/analytics/cycle_analytics/components/add_stage_button.vue'), }, - mixins: [filterMixins, addStageMixin], + mixins: [filterMixins], data() { return { store: CycleAnalyticsStore, @@ -74,7 +69,7 @@ export default () => { // after a group is selected the cycle analyitcs data will be fetched). Once the // old (current) page has been removed this entire created method as well as the // variable itself can be completely removed. - // Follow up issue: https://gitlab.com/gitlab-org/gitlab-ce/issues/64490 + // Follow up issue: https://gitlab.com/gitlab-org/gitlab-foss/issues/64490 if (cycleAnalyticsEl.dataset.requestPath) this.fetchCycleAnalyticsData(); }, methods: { @@ -129,7 +124,6 @@ export default () => { return; } - this.hideAddStageForm(); this.isLoadingStage = true; this.store.setStageEvents([], stage); this.store.setActiveStage(stage); diff --git a/app/assets/javascripts/diff.js b/app/assets/javascripts/diff.js index 245f1a7c558fe7d69dac5ea3f0356be5c8357de8..a343138a9e1d3cd366859d2eefe629a92146e883 100644 --- a/app/assets/javascripts/diff.js +++ b/app/assets/javascripts/diff.js @@ -5,7 +5,7 @@ import { __ } from '~/locale'; import { getLocationHash } from './lib/utils/url_utility'; import FilesCommentButton from './files_comment_button'; import SingleFileDiff from './single_file_diff'; -import imageDiffHelper from './image_diff/helpers/index'; +import initImageDiffHelper from './image_diff/helpers/init_image_diff'; const UNFOLD_COUNT = 20; let isBound = false; @@ -28,7 +28,7 @@ export default class Diff { .first() .get(0); const canCreateNote = firstFile && firstFile.hasAttribute('data-can-create-note'); - $diffFile.each((index, file) => imageDiffHelper.initImageDiff(file, canCreateNote)); + $diffFile.each((index, file) => initImageDiffHelper.initImageDiff(file, canCreateNote)); if (!isBound) { $(document) diff --git a/app/assets/javascripts/diff_notes/components/comment_resolve_btn.js b/app/assets/javascripts/diff_notes/components/comment_resolve_btn.js index 7817b41514d0dd4e342ac21d93ae3f372c277941..84e07598fedc8ee7bcf1b4b5e8116b990947e573 100644 --- a/app/assets/javascripts/diff_notes/components/comment_resolve_btn.js +++ b/app/assets/javascripts/diff_notes/components/comment_resolve_btn.js @@ -1,4 +1,4 @@ -/* eslint-disable object-shorthand, func-names, no-else-return, no-lonely-if */ +/* eslint-disable no-else-return, no-lonely-if */ /* global CommentsStore */ import $ from 'jquery'; @@ -19,17 +19,17 @@ const CommentAndResolveBtn = Vue.extend({ }; }, computed: { - showButton: function() { + showButton() { if (this.discussion) { return this.discussion.isResolvable(); } else { return false; } }, - isDiscussionResolved: function() { + isDiscussionResolved() { return this.discussion.isResolved(); }, - buttonText: function() { + buttonText() { if (this.isDiscussionResolved) { if (this.textareaIsEmpty) { return __('Unresolve thread'); @@ -50,7 +50,7 @@ const CommentAndResolveBtn = Vue.extend({ this.discussion = CommentsStore.state[this.discussionId]; } }, - mounted: function() { + mounted() { if (!this.discussionId) return; const $textarea = $( @@ -62,7 +62,7 @@ const CommentAndResolveBtn = Vue.extend({ this.textareaIsEmpty = $textarea.val() === ''; }); }, - destroyed: function() { + destroyed() { if (!this.discussionId) return; $(`.js-discussion-note-form[data-discussion-id=${this.discussionId}] .note-textarea`).off( diff --git a/app/assets/javascripts/diff_notes/components/jump_to_discussion.js b/app/assets/javascripts/diff_notes/components/jump_to_discussion.js index fe4088cadda83d406736bb3a434391b12bba42c9..092c69a01d3fa681dec0f05bb06e87705b1c0213 100644 --- a/app/assets/javascripts/diff_notes/components/jump_to_discussion.js +++ b/app/assets/javascripts/diff_notes/components/jump_to_discussion.js @@ -1,4 +1,4 @@ -/* eslint-disable object-shorthand, func-names, no-else-return, guard-for-in, no-restricted-syntax, no-lonely-if, no-continue */ +/* eslint-disable func-names, no-else-return, guard-for-in, no-restricted-syntax, no-lonely-if, no-continue */ /* global CommentsStore */ import $ from 'jquery'; @@ -15,24 +15,24 @@ const JumpToDiscussion = Vue.extend({ required: true, }, }, - data: function() { + data() { return { discussions: CommentsStore.state, discussion: {}, }; }, computed: { - buttonText: function() { + buttonText() { if (this.discussionId) { return __('Jump to next unresolved discussion'); } else { return __('Jump to first unresolved discussion'); } }, - allResolved: function() { + allResolved() { return this.unresolvedDiscussionCount === 0; }, - showButton: function() { + showButton() { if (this.discussionId) { if (this.unresolvedDiscussionCount > 1) { return true; @@ -43,7 +43,7 @@ const JumpToDiscussion = Vue.extend({ return this.unresolvedDiscussionCount >= 1; } }, - lastResolvedId: function() { + lastResolvedId() { let lastId; for (const discussionId in this.discussions) { const discussion = this.discussions[discussionId]; @@ -59,7 +59,7 @@ const JumpToDiscussion = Vue.extend({ this.discussion = this.discussions[this.discussionId]; }, methods: { - jumpToNextUnresolvedDiscussion: function() { + jumpToNextUnresolvedDiscussion() { let discussionsSelector; let discussionIdsInScope; let firstUnresolvedDiscussionId; diff --git a/app/assets/javascripts/diff_notes/components/resolve_count.js b/app/assets/javascripts/diff_notes/components/resolve_count.js index d8b056096f478571735f73f7053c7562cb34d0de..f960853b25b8732d5995aa0ffded41c64541afae 100644 --- a/app/assets/javascripts/diff_notes/components/resolve_count.js +++ b/app/assets/javascripts/diff_notes/components/resolve_count.js @@ -1,4 +1,3 @@ -/* eslint-disable object-shorthand, func-names */ /* global CommentsStore */ import Vue from 'vue'; @@ -13,13 +12,13 @@ window.ResolveCount = Vue.extend({ required: true, }, }, - data: function() { + data() { return { discussions: CommentsStore.state, }; }, computed: { - allResolved: function() { + allResolved() { return this.resolvedDiscussionCount === this.discussionCount; }, resolvedCountText() { diff --git a/app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js b/app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js index 4b204fdfeb02bdb85f7b6c6e6b2ffac6517b89bd..5f2a17da6309a6fc1e2135105a40a3bd09fbdc6b 100644 --- a/app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js +++ b/app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js @@ -1,4 +1,4 @@ -/* eslint-disable object-shorthand, func-names, no-else-return */ +/* eslint-disable no-else-return */ /* global CommentsStore */ /* global ResolveService */ @@ -20,34 +20,34 @@ const ResolveDiscussionBtn = Vue.extend({ required: true, }, }, - data: function() { + data() { return { discussion: {}, }; }, computed: { - showButton: function() { + showButton() { if (this.discussion) { return this.discussion.isResolvable(); } else { return false; } }, - isDiscussionResolved: function() { + isDiscussionResolved() { if (this.discussion) { return this.discussion.isResolved(); } else { return false; } }, - buttonText: function() { + buttonText() { if (this.isDiscussionResolved) { return __('Unresolve discussion'); } else { return __('Resolve discussion'); } }, - loading: function() { + loading() { if (this.discussion) { return this.discussion.loading; } else { @@ -55,13 +55,13 @@ const ResolveDiscussionBtn = Vue.extend({ } }, }, - created: function() { + created() { CommentsStore.createDiscussion(this.discussionId, this.canResolve); this.discussion = CommentsStore.state[this.discussionId]; }, methods: { - resolve: function() { + resolve() { ResolveService.toggleResolveForDiscussion(this.mergeRequestId, this.discussionId); }, }, diff --git a/app/assets/javascripts/diff_notes/mixins/discussion.js b/app/assets/javascripts/diff_notes/mixins/discussion.js index dea64dca1320f07ca55bc285078b42c0b49450ed..ef3001393cfee4015bd109168be6dafbe054f1bb 100644 --- a/app/assets/javascripts/diff_notes/mixins/discussion.js +++ b/app/assets/javascripts/diff_notes/mixins/discussion.js @@ -1,11 +1,11 @@ -/* eslint-disable object-shorthand, func-names, guard-for-in, no-restricted-syntax, */ +/* eslint-disable guard-for-in, no-restricted-syntax, */ const DiscussionMixins = { computed: { - discussionCount: function() { + discussionCount() { return Object.keys(this.discussions).length; }, - resolvedDiscussionCount: function() { + resolvedDiscussionCount() { let resolvedCount = 0; for (const discussionId in this.discussions) { @@ -18,7 +18,7 @@ const DiscussionMixins = { return resolvedCount; }, - unresolvedDiscussionCount: function() { + unresolvedDiscussionCount() { let unresolvedCount = 0; for (const discussionId in this.discussions) { diff --git a/app/assets/javascripts/diff_notes/services/resolve.js b/app/assets/javascripts/diff_notes/services/resolve.js index 0687028ca54208aaa95200a91cdccf12797a4926..27990b0a45ebcd8fafa601335635b941257d0102 100644 --- a/app/assets/javascripts/diff_notes/services/resolve.js +++ b/app/assets/javascripts/diff_notes/services/resolve.js @@ -2,7 +2,6 @@ import Vue from 'vue'; import Flash from '../../flash'; -import '../../vue_shared/vue_resource_interceptor'; import { __ } from '~/locale'; window.gl = window.gl || {}; diff --git a/app/assets/javascripts/diff_notes/stores/comments.js b/app/assets/javascripts/diff_notes/stores/comments.js index 060bb044f7883ec8726855f326590b9501d11b8a..69a972f644d634a5f4367cf975fe956186b9ee7e 100644 --- a/app/assets/javascripts/diff_notes/stores/comments.js +++ b/app/assets/javascripts/diff_notes/stores/comments.js @@ -1,14 +1,14 @@ -/* eslint-disable object-shorthand, func-names, camelcase, no-restricted-syntax, guard-for-in */ +/* eslint-disable camelcase, no-restricted-syntax, guard-for-in */ /* global DiscussionModel */ import Vue from 'vue'; window.CommentsStore = { state: {}, - get: function(discussionId, noteId) { + get(discussionId, noteId) { return this.state[discussionId].getNote(noteId); }, - createDiscussion: function(discussionId, canResolve) { + createDiscussion(discussionId, canResolve) { let discussion = this.state[discussionId]; if (!this.state[discussionId]) { discussion = new DiscussionModel(discussionId); @@ -21,18 +21,18 @@ window.CommentsStore = { return discussion; }, - create: function(noteObj) { + create(noteObj) { const discussion = this.createDiscussion(noteObj.discussionId); discussion.createNote(noteObj); }, - update: function(discussionId, noteId, resolved, resolved_by) { + update(discussionId, noteId, resolved, resolved_by) { const discussion = this.state[discussionId]; const note = discussion.getNote(noteId); note.resolved = resolved; note.resolved_by = resolved_by; }, - delete: function(discussionId, noteId) { + delete(discussionId, noteId) { const discussion = this.state[discussionId]; discussion.deleteNote(noteId); @@ -40,7 +40,7 @@ window.CommentsStore = { Vue.delete(this.state, discussionId); } }, - unresolvedDiscussionIds: function() { + unresolvedDiscussionIds() { const ids = []; for (const discussionId in this.state) { diff --git a/app/assets/javascripts/diffs/components/commit_item.vue b/app/assets/javascripts/diffs/components/commit_item.vue index c82b4a7abc6251845258ff3b9862862f68b02e0a..761fd1583ed701ba6e21b8ff9d485ca0d34ad1a8 100644 --- a/app/assets/javascripts/diffs/components/commit_item.vue +++ b/app/assets/javascripts/diffs/components/commit_item.vue @@ -17,7 +17,7 @@ import initUserPopovers from '../../user_popovers'; * * This Component was cloned from a HAML view. For the time being they * coexist, but there is an issue to remove the duplication. - * https://gitlab.com/gitlab-org/gitlab-ce/issues/51613 + * https://gitlab.com/gitlab-org/gitlab-foss/issues/51613 * */ export default { diff --git a/app/assets/javascripts/diffs/components/commit_widget.vue b/app/assets/javascripts/diffs/components/commit_widget.vue index d45f91c7023b3f7f34f0efa1284a3b70fbc82b38..31ed003cc0f04c03574d72418c58ced7cc6fd497 100644 --- a/app/assets/javascripts/diffs/components/commit_widget.vue +++ b/app/assets/javascripts/diffs/components/commit_widget.vue @@ -11,7 +11,7 @@ import CommitItem from './commit_item.vue'; * * This Component was cloned from a HAML view. For the time being, * they coexist, but there is an issue to remove the duplication. - * https://gitlab.com/gitlab-org/gitlab-ce/issues/51613 + * https://gitlab.com/gitlab-org/gitlab-foss/issues/51613 * */ export default { diff --git a/app/assets/javascripts/diffs/components/diff_content.vue b/app/assets/javascripts/diffs/components/diff_content.vue index d59b11366779a92135090005c6e438bf885b0b96..9a1e59ec045c5b8a68f53dbd5df56a95801432af 100644 --- a/app/assets/javascripts/diffs/components/diff_content.vue +++ b/app/assets/javascripts/diffs/components/diff_content.vue @@ -45,7 +45,6 @@ export default { computed: { ...mapState({ projectPath: state => state.diffs.projectPath, - endpoint: state => state.diffs.endpoint, }), ...mapGetters('diffs', ['isInlineView', 'isParallelView']), ...mapGetters('diffs', ['getCommentFormForDiffFile']), diff --git a/app/assets/javascripts/diffs/index.js b/app/assets/javascripts/diffs/index.js index 1e57e9b8a30a690799f7cfe5302241c2d909d2a1..c9580e3d3b45dff799ba61659860fff1c00eaa8c 100644 --- a/app/assets/javascripts/diffs/index.js +++ b/app/assets/javascripts/diffs/index.js @@ -74,6 +74,7 @@ export default function initDiffsApp(store) { isFluidLayout: parseBoolean(dataset.isFluidLayout), dismissEndpoint: dataset.dismissEndpoint, showSuggestPopover: parseBoolean(dataset.showSuggestPopover), + showWhitespaceDefault: parseBoolean(dataset.showWhitespaceDefault), }; }, computed: { @@ -82,11 +83,15 @@ export default function initDiffsApp(store) { }), }, created() { + let hideWhitespace = getParameterValues('w')[0]; const treeListStored = localStorage.getItem(TREE_LIST_STORAGE_KEY); const renderTreeList = treeListStored !== null ? parseBoolean(treeListStored) : true; this.setRenderTreeList(renderTreeList); - this.setShowWhitespace({ showWhitespace: getParameterValues('w')[0] !== '1' }); + if (!hideWhitespace) { + hideWhitespace = this.showWhitespaceDefault ? '0' : '1'; + } + this.setShowWhitespace({ showWhitespace: hideWhitespace !== '1' }); }, methods: { ...mapActions('diffs', ['setRenderTreeList', 'setShowWhitespace']), @@ -103,6 +108,7 @@ export default function initDiffsApp(store) { isFluidLayout: this.isFluidLayout, dismissEndpoint: this.dismissEndpoint, showSuggestPopover: this.showSuggestPopover, + showWhitespaceDefault: this.showWhitespaceDefault, }, }); }, diff --git a/app/assets/javascripts/environments/components/environment_actions.vue b/app/assets/javascripts/environments/components/environment_actions.vue index 21244c1497708917d53ad1f96a66d77f5e36db07..22bba21526c372676410c97b9974aaf73ef11a45 100644 --- a/app/assets/javascripts/environments/components/environment_actions.vue +++ b/app/assets/javascripts/environments/components/environment_actions.vue @@ -40,7 +40,7 @@ export default { ), { jobName: action.name }, ); - // https://gitlab.com/gitlab-org/gitlab-ce/issues/52156 + // https://gitlab.com/gitlab-org/gitlab-foss/issues/52156 // eslint-disable-next-line no-alert if (!window.confirm(confirmationMessage)) { return; diff --git a/app/assets/javascripts/environments/components/environment_item.vue b/app/assets/javascripts/environments/components/environment_item.vue index 1d4a6e64f9d2030ad03c1515dafef78cee946503..c94039326aa75e011b5cf84d19c38fd3e124e772 100644 --- a/app/assets/javascripts/environments/components/environment_item.vue +++ b/app/assets/javascripts/environments/components/environment_item.vue @@ -278,7 +278,7 @@ export default { */ isLastDeployment() { // name: 'last?' is a false positive: https://gitlab.com/gitlab-org/frontend/eslint-plugin-i18n/issues/26#possible-false-positives - // Vue i18n ESLint rules issue: https://gitlab.com/gitlab-org/gitlab-ce/issues/63560 + // Vue i18n ESLint rules issue: https://gitlab.com/gitlab-org/gitlab-foss/issues/63560 // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings return this.model && this.model.last_deployment && this.model.last_deployment['last?']; }, diff --git a/app/assets/javascripts/environments/components/stop_environment_modal.vue b/app/assets/javascripts/environments/components/stop_environment_modal.vue index 2cc3412e075220d36c1512a4f11f57baf4ed6dea..1ea4e30a7c1f72fa0ff44b89787a2d3ff68cbd17 100644 --- a/app/assets/javascripts/environments/components/stop_environment_modal.vue +++ b/app/assets/javascripts/environments/components/stop_environment_modal.vue @@ -1,7 +1,7 @@