Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
		
							parent
							
								
									99454db49e
								
							
						
					
					
						commit
						0f59ad0c29
					
				|  | @ -1,5 +1,3 @@ | |||
| image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-10-graphicsmagick-1.3.34" | ||||
| 
 | ||||
| stages: | ||||
|   - sync | ||||
|   - prepare | ||||
|  | @ -16,6 +14,7 @@ stages: | |||
| # in cases where jobs require Docker-in-Docker, the job | ||||
| # definition must be extended with `.use-docker-in-docker` | ||||
| default: | ||||
|   image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-9.6-graphicsmagick-1.3.34" | ||||
|   tags: | ||||
|     - gitlab-org | ||||
|   # All jobs are interruptible by default | ||||
|  |  | |||
|  | @ -3,9 +3,9 @@ | |||
|     - .default-retry | ||||
|     - .default-cache | ||||
|     - .default-before_script | ||||
|     - .use-pg11 | ||||
|     - .use-pg9 | ||||
|   stage: test | ||||
|   needs: ["setup-test-env pg11"] | ||||
|   needs: ["setup-test-env pg9"] | ||||
|   variables: | ||||
|     FIXTURE_PATH: "db/fixtures/development" | ||||
|     SEED_CYCLE_ANALYTICS: "true" | ||||
|  | @ -26,7 +26,7 @@ run-dev-fixtures-ee: | |||
|   extends: | ||||
|     - .run-dev-fixtures | ||||
|     - .dev-fixtures:rules:ee-only | ||||
|     - .use-pg11-ee | ||||
|     - .use-pg9-ee | ||||
|   script: | ||||
|     - scripts/gitaly-test-spawn | ||||
|     - cp ee/db/fixtures/development/* $FIXTURE_PATH | ||||
|  |  | |||
|  | @ -66,9 +66,9 @@ graphql-reference-verify: | |||
|     - .default-cache | ||||
|     - .default-before_script | ||||
|     - .docs:rules:graphql-reference-verify | ||||
|     - .use-pg11 | ||||
|     - .use-pg9 | ||||
|   stage: test | ||||
|   needs: ["setup-test-env pg11"] | ||||
|   needs: ["setup-test-env pg9"] | ||||
|   script: | ||||
|     - bundle exec rake gitlab:graphql:check_docs | ||||
|     - bundle exec rake gitlab:graphql:check_schema | ||||
|  |  | |||
|  | @ -129,9 +129,9 @@ compile-assets pull-cache as-if-foss: | |||
|     - .default-retry | ||||
|     - .default-cache | ||||
|     - .default-before_script | ||||
|     - .use-pg11 | ||||
|     - .use-pg9 | ||||
|   stage: fixtures | ||||
|   needs: ["setup-test-env pg11", "compile-assets pull-cache"] | ||||
|   needs: ["setup-test-env pg9", "compile-assets pull-cache"] | ||||
|   script: | ||||
|     - date | ||||
|     - scripts/gitaly-test-spawn | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| memory-static: | ||||
|   extends: .only-code-memory-job-base | ||||
|   stage: test | ||||
|   needs: ["setup-test-env pg11"] | ||||
|   needs: ["setup-test-env pg9"] | ||||
|   variables: | ||||
|     SETUP_DB: "false" | ||||
|   script: | ||||
|  | @ -36,9 +36,9 @@ memory-static: | |||
| memory-on-boot: | ||||
|   extends: | ||||
|     - .only-code-memory-job-base | ||||
|     - .use-pg11 | ||||
|     - .use-pg9 | ||||
|   stage: test | ||||
|   needs: ["setup-test-env pg11", "compile-assets pull-cache"] | ||||
|   needs: ["setup-test-env pg9", "compile-assets pull-cache"] | ||||
|   variables: | ||||
|     NODE_ENV: "production" | ||||
|     RAILS_ENV: "production" | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| .rails:needs:setup-and-assets: | ||||
|   needs: ["setup-test-env pg11", "compile-assets pull-cache"] | ||||
|   needs: ["setup-test-env pg9", "compile-assets pull-cache"] | ||||
| 
 | ||||
| .rails-job-base: | ||||
|   extends: | ||||
|  | @ -7,8 +7,8 @@ | |||
|     - .default-cache | ||||
|     - .default-before_script | ||||
| 
 | ||||
| #################### | ||||
| # EE and FOSS jobs # | ||||
| ####################################################### | ||||
| # EE/FOSS: default refs (MRs, master, schedules) jobs # | ||||
| .base-setup-test-env: | ||||
|   extends: | ||||
|     - .rails-job-base | ||||
|  | @ -28,19 +28,19 @@ | |||
| setup-test-env pg11: | ||||
|   extends: | ||||
|     - .base-setup-test-env | ||||
|     - .rails:rules:default-refs-code-backstage-qa | ||||
|     - .rails:rules:master-push--master-schedule-2-hourly--code-backstage | ||||
|     - .use-pg11 | ||||
| 
 | ||||
| setup-test-env pg10: | ||||
|   extends: | ||||
|     - .base-setup-test-env | ||||
|     - .rails:rules:master-refs-code-backstage | ||||
|     - .rails:rules:master-schedule-nightly--code-backstage | ||||
|     - .use-pg10 | ||||
| 
 | ||||
| setup-test-env pg9: | ||||
|   extends: | ||||
|     - .base-setup-test-env | ||||
|     - .rails:rules:nightly-master-refs-code-backstage | ||||
|     - .rails:rules:default-refs-code-backstage-qa | ||||
|     - .use-pg9 | ||||
| 
 | ||||
| static-analysis: | ||||
|  | @ -55,7 +55,7 @@ static-analysis: | |||
|   script: | ||||
|     - scripts/static-analysis | ||||
|   cache: | ||||
|     key: "ruby-2.6.5-pg11-rubocop" | ||||
|     key: "ruby-2.6.5-pg9-rubocop" | ||||
|     paths: | ||||
|       - vendor/ruby | ||||
|       - tmp/rubocop_cache | ||||
|  | @ -75,7 +75,7 @@ downtime_check: | |||
| .rspec-base: | ||||
|   extends: .rails-job-base | ||||
|   stage: test | ||||
|   needs: ["setup-test-env pg11", "retrieve-tests-metadata", "compile-assets pull-cache"] | ||||
|   needs: ["setup-test-env pg9", "retrieve-tests-metadata", "compile-assets pull-cache"] | ||||
|   script: | ||||
|     - source scripts/rspec_helpers.sh | ||||
|     - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag ~level:migration" | ||||
|  | @ -93,37 +93,37 @@ downtime_check: | |||
|     reports: | ||||
|       junit: junit_rspec.xml | ||||
| 
 | ||||
| .rspec-base-pg11: | ||||
| .rspec-base-pg9: | ||||
|   extends: | ||||
|     - .rspec-base | ||||
|     - .rails:rules:ee-and-foss | ||||
|     - .use-pg11 | ||||
|     - .use-pg9 | ||||
| 
 | ||||
| .rspec-base-migration: | ||||
|   script: | ||||
|     - source scripts/rspec_helpers.sh | ||||
|     - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag level:migration" | ||||
| 
 | ||||
| rspec migration pg11: | ||||
| rspec migration pg9: | ||||
|   extends: | ||||
|     - .rspec-base-pg11 | ||||
|     - .rspec-base-pg9 | ||||
|     - .rspec-base-migration | ||||
|   parallel: 5 | ||||
| 
 | ||||
| rspec unit pg11: | ||||
|   extends: .rspec-base-pg11 | ||||
| rspec unit pg9: | ||||
|   extends: .rspec-base-pg9 | ||||
|   parallel: 20 | ||||
| 
 | ||||
| rspec integration pg11: | ||||
|   extends: .rspec-base-pg11 | ||||
| rspec integration pg9: | ||||
|   extends: .rspec-base-pg9 | ||||
|   parallel: 8 | ||||
| 
 | ||||
| rspec system pg11: | ||||
|   extends: .rspec-base-pg11 | ||||
| rspec system pg9: | ||||
|   extends: .rspec-base-pg9 | ||||
|   parallel: 24 | ||||
| 
 | ||||
| rspec fast_spec_helper: | ||||
|   extends: .rspec-base-pg11 | ||||
|   extends: .rspec-base-pg9 | ||||
|   script: | ||||
|     - bin/rspec spec/fast_spec_helper.rb | ||||
| 
 | ||||
|  | @ -131,9 +131,9 @@ rspec fast_spec_helper: | |||
|   extends: | ||||
|     - .rails-job-base | ||||
|     - .rails:rules:ee-and-foss | ||||
|     - .use-pg11 | ||||
|     - .use-pg9 | ||||
|   stage: test | ||||
|   needs: ["setup-test-env pg11"] | ||||
|   needs: ["setup-test-env pg9"] | ||||
| 
 | ||||
| db:migrate:reset: | ||||
|   extends: .db-job-base | ||||
|  | @ -202,18 +202,18 @@ rspec:coverage: | |||
|   # We cannot use needs since it would mean needing 84 jobs (since most are parallelized) | ||||
|   # so we use `dependencies` here. | ||||
|   dependencies: | ||||
|     - setup-test-env pg11 | ||||
|     - rspec migration pg11 | ||||
|     - rspec unit pg11 | ||||
|     - rspec integration pg11 | ||||
|     - rspec system pg11 | ||||
|     - rspec-ee migration pg11 | ||||
|     - rspec-ee unit pg11 | ||||
|     - rspec-ee integration pg11 | ||||
|     - rspec-ee system pg11 | ||||
|     - rspec-ee unit pg11 geo | ||||
|     - rspec-ee integration pg11 geo | ||||
|     - rspec-ee system pg11 geo | ||||
|     - setup-test-env pg9 | ||||
|     - rspec migration pg9 | ||||
|     - rspec unit pg9 | ||||
|     - rspec integration pg9 | ||||
|     - rspec system pg9 | ||||
|     - rspec-ee migration pg9 | ||||
|     - rspec-ee unit pg9 | ||||
|     - rspec-ee integration pg9 | ||||
|     - rspec-ee system pg9 | ||||
|     - rspec-ee unit pg9 geo | ||||
|     - rspec-ee integration pg9 geo | ||||
|     - rspec-ee system pg9 geo | ||||
|     - memory-static | ||||
|     - memory-on-boot | ||||
|   variables: | ||||
|  | @ -231,15 +231,166 @@ rspec:coverage: | |||
|       - coverage/index.html | ||||
|       - coverage/assets/ | ||||
|       - tmp/memory_test/ | ||||
| # EE and FOSS jobs # | ||||
| #################### | ||||
| # EE/FOSS: default refs (MRs, master, schedules) jobs # | ||||
| ####################################################### | ||||
| 
 | ||||
| #################### | ||||
| # master-only jobs # | ||||
| ################################################## | ||||
| # EE: default refs (MRs, master, schedules) jobs # | ||||
| .rspec-base-ee: | ||||
|   extends: | ||||
|     - .rspec-base | ||||
|     - .rails:rules:ee-only | ||||
| 
 | ||||
| .rspec-base-pg9-as-if-foss: | ||||
|   extends: | ||||
|     - .rspec-base-ee | ||||
|     - .as-if-foss | ||||
|     - .use-pg9 | ||||
|   needs: ["setup-test-env pg9", "retrieve-tests-metadata", "compile-assets pull-cache as-if-foss"] | ||||
| 
 | ||||
| .rspec-ee-base-pg9: | ||||
|   extends: | ||||
|     - .rspec-base-ee | ||||
|     - .use-pg9-ee | ||||
| 
 | ||||
| rspec migration pg9-as-if-foss: | ||||
|   extends: | ||||
|     - .rspec-base-pg9-as-if-foss | ||||
|     - .rspec-base-migration | ||||
|   parallel: 5 | ||||
| 
 | ||||
| rspec unit pg9-as-if-foss: | ||||
|   extends: .rspec-base-pg9-as-if-foss | ||||
|   parallel: 20 | ||||
| 
 | ||||
| rspec integration pg9-as-if-foss: | ||||
|   extends: .rspec-base-pg9-as-if-foss | ||||
|   parallel: 8 | ||||
| 
 | ||||
| rspec system pg9-as-if-foss: | ||||
|   extends: .rspec-base-pg9-as-if-foss | ||||
|   parallel: 24 | ||||
| 
 | ||||
| rspec-ee migration pg9: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg9 | ||||
|     - .rspec-base-migration | ||||
|   parallel: 2 | ||||
| 
 | ||||
| rspec-ee unit pg9: | ||||
|   extends: .rspec-ee-base-pg9 | ||||
|   parallel: 10 | ||||
| 
 | ||||
| rspec-ee integration pg9: | ||||
|   extends: .rspec-ee-base-pg9 | ||||
|   parallel: 4 | ||||
| 
 | ||||
| rspec-ee system pg9: | ||||
|   extends: .rspec-ee-base-pg9 | ||||
|   parallel: 6 | ||||
| 
 | ||||
| .rspec-ee-base-geo: | ||||
|   extends: .rspec-base-ee | ||||
|   script: | ||||
|     - source scripts/rspec_helpers.sh | ||||
|     - scripts/prepare_postgres_fdw.sh | ||||
|     - rspec_paralellized_job "--tag ~quarantine --tag geo" | ||||
| 
 | ||||
| .rspec-ee-base-geo-pg9: | ||||
|   extends: | ||||
|     - .rspec-ee-base-geo | ||||
|     - .use-pg9-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 | ||||
| 
 | ||||
| db:rollback geo: | ||||
|   extends: | ||||
|     - db:rollback | ||||
|     - .rails:rules:ee-only | ||||
|   script: | ||||
|     - bundle exec rake geo:db:migrate VERSION=20170627195211 | ||||
|     - bundle exec rake geo:db:migrate | ||||
| # EE: default refs (MRs, master, schedules) jobs # | ||||
| ################################################## | ||||
| 
 | ||||
| #################################################################### | ||||
| # EE/FOSS: master non-scheduled and master 2-hourly scheduled jobs # | ||||
| .rspec-base-pg11: | ||||
|   extends: | ||||
|     - .rspec-base | ||||
|     - .rails:rules:master-push--master-schedule-2-hourly--code-backstage | ||||
|     - .use-pg11 | ||||
|   needs: ["setup-test-env pg11", "retrieve-tests-metadata", "compile-assets pull-cache"] | ||||
| 
 | ||||
| rspec migration pg11: | ||||
|   extends: | ||||
|     - .rspec-base-pg11 | ||||
|     - .rspec-base-migration | ||||
|   parallel: 5 | ||||
| 
 | ||||
| rspec unit pg11: | ||||
|   extends: .rspec-base-pg11 | ||||
|   parallel: 20 | ||||
| 
 | ||||
| rspec integration pg11: | ||||
|   extends: .rspec-base-pg11 | ||||
|   parallel: 8 | ||||
| 
 | ||||
| rspec system pg11: | ||||
|   extends: .rspec-base-pg11 | ||||
|   parallel: 24 | ||||
| # EE/FOSS: master non-scheduled and master 2-hourly scheduled jobs # | ||||
| #################################################################### | ||||
| 
 | ||||
| ############################################################### | ||||
| # EE: master non-scheduled and master 2-hourly scheduled jobs # | ||||
| .rspec-ee-base-pg11: | ||||
|   extends: | ||||
|     - .rspec-base-ee | ||||
|     - .use-pg11-ee | ||||
|   needs: ["setup-test-env pg11", "retrieve-tests-metadata", "compile-assets pull-cache"] | ||||
| 
 | ||||
| rspec-ee migration pg11: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg11 | ||||
|     - .rspec-base-migration | ||||
|     - .rails:rules:master-push--master-schedule-2-hourly--code-backstage | ||||
|   parallel: 2 | ||||
| 
 | ||||
| rspec-ee unit pg11: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg11 | ||||
|     - .rails:rules:master-push--master-schedule-2-hourly--code-backstage | ||||
|   parallel: 10 | ||||
| 
 | ||||
| rspec-ee integration pg11: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg11 | ||||
|     - .rails:rules:master-push--master-schedule-2-hourly--code-backstage | ||||
|   parallel: 4 | ||||
| 
 | ||||
| rspec-ee system pg11: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg11 | ||||
|     - .rails:rules:master-push--master-schedule-2-hourly--code-backstage | ||||
|   parallel: 6 | ||||
| # EE: master non-scheduled and master 2-hourly scheduled jobs # | ||||
| ############################################################### | ||||
| 
 | ||||
| ########################################## | ||||
| # EE/FOSS: master nightly scheduled jobs # | ||||
| .rspec-base-pg10: | ||||
|   extends: | ||||
|     - .rspec-base | ||||
|     - .rails:rules:master-refs-code-backstage | ||||
|     - .rails:rules:master-schedule-nightly--code-backstage | ||||
|     - .use-pg10 | ||||
|   needs: ["setup-test-env pg10", "retrieve-tests-metadata", "compile-assets pull-cache"] | ||||
| 
 | ||||
|  | @ -260,177 +411,26 @@ rspec integration pg10: | |||
| rspec system pg10: | ||||
|   extends: .rspec-base-pg10 | ||||
|   parallel: 24 | ||||
| # master-only jobs # | ||||
| #################### | ||||
| # EE/FOSS: master nightly scheduled jobs # | ||||
| ########################################## | ||||
| 
 | ||||
| ###################### | ||||
| # nightly-only jobs # | ||||
| .rspec-base-pg9: | ||||
| ############################## | ||||
| # EE: nightly scheduled jobs # | ||||
| .rspec-ee-base-geo-pg10: | ||||
|   extends: | ||||
|     - .rspec-base | ||||
|     - .rails:rules:nightly-master-refs-code-backstage | ||||
|     - .use-pg9 | ||||
|   needs: ["setup-test-env pg9", "retrieve-tests-metadata", "compile-assets pull-cache"] | ||||
| 
 | ||||
| rspec migration pg9: | ||||
|   extends: | ||||
|     - .rspec-base-pg9 | ||||
|     - .rspec-base-migration | ||||
|   parallel: 5 | ||||
| 
 | ||||
| rspec unit pg9: | ||||
|   extends: .rspec-base-pg9 | ||||
|   parallel: 20 | ||||
| 
 | ||||
| rspec integration pg9: | ||||
|   extends: .rspec-base-pg9 | ||||
|   parallel: 8 | ||||
| 
 | ||||
| rspec system pg9: | ||||
|   extends: .rspec-base-pg9 | ||||
|   parallel: 24 | ||||
| # nightly-only jobs # | ||||
| ##################### | ||||
| 
 | ||||
| ####################### | ||||
| # EE master-only jobs # | ||||
| .rspec-ee-base-pg10: | ||||
|   extends: | ||||
|     - .rspec-base-ee | ||||
|     - .rspec-ee-base-geo | ||||
|     - .use-pg10-ee | ||||
|     - .rails:rules:master-schedule-nightly--code-backstage-ee-only | ||||
|   needs: ["setup-test-env pg10", "retrieve-tests-metadata", "compile-assets pull-cache"] | ||||
| 
 | ||||
| rspec-ee migration pg10: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg10 | ||||
|     - .rspec-base-migration | ||||
|     - .rails:rules:master-refs-code-backstage | ||||
| rspec-ee unit pg10 geo: | ||||
|   extends: .rspec-ee-base-geo-pg10 | ||||
|   parallel: 2 | ||||
| 
 | ||||
| rspec-ee unit pg10: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg10 | ||||
|     - .rails:rules:master-refs-code-backstage | ||||
|   parallel: 10 | ||||
| rspec-ee integration pg10 geo: | ||||
|   extends: .rspec-ee-base-geo-pg10 | ||||
| 
 | ||||
| rspec-ee integration pg10: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg10 | ||||
|     - .rails:rules:master-refs-code-backstage | ||||
|   parallel: 4 | ||||
| 
 | ||||
| rspec-ee system pg10: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg10 | ||||
|     - .rails:rules:master-refs-code-backstage | ||||
|   parallel: 6 | ||||
| # EE master-only jobs # | ||||
| ####################### | ||||
| 
 | ||||
| ################ | ||||
| # EE-only jobs # | ||||
| .rspec-base-ee: | ||||
|   extends: | ||||
|     - .rspec-base | ||||
|     - .rails:rules:ee-only | ||||
| 
 | ||||
| .rspec-base-pg11-as-if-foss: | ||||
|   extends: | ||||
|     - .rspec-base-ee | ||||
|     - .as-if-foss | ||||
|     - .use-pg11 | ||||
|   needs: ["setup-test-env pg11", "retrieve-tests-metadata", "compile-assets pull-cache as-if-foss"] | ||||
| 
 | ||||
| .rspec-ee-base-pg11: | ||||
|   extends: | ||||
|     - .rspec-base-ee | ||||
|     - .use-pg11-ee | ||||
| 
 | ||||
| rspec migration pg11-as-if-foss: | ||||
|   extends: | ||||
|     - .rspec-base-pg11-as-if-foss | ||||
|     - .rspec-base-migration | ||||
|   parallel: 5 | ||||
| 
 | ||||
| rspec unit pg11-as-if-foss: | ||||
|   extends: .rspec-base-pg11-as-if-foss | ||||
|   parallel: 20 | ||||
| 
 | ||||
| rspec integration pg11-as-if-foss: | ||||
|   extends: .rspec-base-pg11-as-if-foss | ||||
|   parallel: 8 | ||||
| 
 | ||||
| rspec system pg11-as-if-foss: | ||||
|   extends: .rspec-base-pg11-as-if-foss | ||||
|   parallel: 24 | ||||
| 
 | ||||
| rspec-ee migration pg11: | ||||
|   extends: | ||||
|     - .rspec-ee-base-pg11 | ||||
|     - .rspec-base-migration | ||||
|   parallel: 2 | ||||
| 
 | ||||
| rspec-ee unit pg11: | ||||
|   extends: .rspec-ee-base-pg11 | ||||
|   parallel: 10 | ||||
| 
 | ||||
| rspec-ee integration pg11: | ||||
|   extends: .rspec-ee-base-pg11 | ||||
|   parallel: 4 | ||||
| 
 | ||||
| rspec-ee system pg11: | ||||
|   extends: .rspec-ee-base-pg11 | ||||
|   parallel: 6 | ||||
| 
 | ||||
| .rspec-ee-base-geo: | ||||
|   extends: .rspec-base-ee | ||||
|   script: | ||||
|     - source scripts/rspec_helpers.sh | ||||
|     - scripts/prepare_postgres_fdw.sh | ||||
|     - rspec_paralellized_job "--tag ~quarantine --tag geo" | ||||
| 
 | ||||
| .rspec-ee-base-geo-pg11: | ||||
|   extends: | ||||
|     - .rspec-ee-base-geo | ||||
|     - .use-pg11-ee | ||||
| 
 | ||||
| rspec-ee unit pg11 geo: | ||||
|   extends: .rspec-ee-base-geo-pg11 | ||||
|   parallel: 2 | ||||
| 
 | ||||
| rspec-ee integration pg11 geo: | ||||
|   extends: .rspec-ee-base-geo-pg11 | ||||
| 
 | ||||
| rspec-ee system pg11 geo: | ||||
|   extends: .rspec-ee-base-geo-pg11 | ||||
| 
 | ||||
| db:rollback geo: | ||||
|   extends: | ||||
|     - db:rollback | ||||
|     - .rails:rules:ee-only | ||||
|   script: | ||||
|     - bundle exec rake geo:db:migrate VERSION=20170627195211 | ||||
|     - bundle exec rake geo:db:migrate | ||||
| # EE-only jobs # | ||||
| ################ | ||||
| 
 | ||||
| ######################## | ||||
| # EE nightly-only jobs # | ||||
| .rspec-ee-base-geo-pg9: | ||||
|   extends: | ||||
|     - .rspec-ee-base-geo | ||||
|     - .use-pg9-ee | ||||
|     - .rails:rules:nightly-master-refs-code-backstage-ee-only | ||||
|   needs: ["setup-test-env pg9", "retrieve-tests-metadata", "compile-assets pull-cache"] | ||||
| 
 | ||||
| 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 | ||||
| # EE nightly-only jobs # | ||||
| ######################## | ||||
| rspec-ee system pg10 geo: | ||||
|   extends: .rspec-ee-base-geo-pg10 | ||||
| # EE: nightly scheduled jobs # | ||||
| ############################## | ||||
|  |  | |||
|  | @ -16,6 +16,15 @@ | |||
| .if-master-refs: &if-master-refs | ||||
|   if: '$CI_COMMIT_REF_NAME == "master"' | ||||
| 
 | ||||
| .if-master-push: &if-master-push | ||||
|   if: '$CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE == "push"' | ||||
| 
 | ||||
| .if-master-schedule-2-hourly: &if-master-schedule-2-hourly | ||||
|   if: '$CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE == "schedule" && $FREQUENCY == "2-hourly"' | ||||
| 
 | ||||
| .if-master-schedule-nightly: &if-master-schedule-nightly | ||||
|   if: '$CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE == "schedule" && $FREQUENCY == "nightly"' | ||||
| 
 | ||||
| .if-auto-deploy-branches: &if-auto-deploy-branches | ||||
|   if: '$CI_COMMIT_BRANCH =~ /^\d+-\d+-auto-deploy-\d+$/' | ||||
| 
 | ||||
|  | @ -25,9 +34,6 @@ | |||
| .if-merge-request: &if-merge-request | ||||
|   if: '$CI_MERGE_REQUEST_IID' | ||||
| 
 | ||||
| .if-nightly-master-schedule: &if-nightly-master-schedule | ||||
|   if: '$NIGHTLY && $CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "schedule"' | ||||
| 
 | ||||
| .if-dot-com-gitlab-org-schedule: &if-dot-com-gitlab-org-schedule | ||||
|   if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" && $CI_PIPELINE_SOURCE == "schedule"' | ||||
| 
 | ||||
|  | @ -360,36 +366,33 @@ | |||
|   rules: | ||||
|     - <<: *if-default-refs | ||||
|       changes: *code-backstage-patterns | ||||
|       when: on_success | ||||
| 
 | ||||
| .rails:rules:default-refs-code-backstage-qa: | ||||
|   rules: | ||||
|     - <<: *if-default-refs | ||||
|       changes: *code-backstage-qa-patterns | ||||
|       when: on_success | ||||
| 
 | ||||
| .rails:rules:master-refs-code-backstage: | ||||
| .rails:rules:master-push--master-schedule-2-hourly--code-backstage: | ||||
|   rules: | ||||
|     - <<: *if-master-refs | ||||
|     - <<: *if-master-push | ||||
|       changes: *code-backstage-patterns | ||||
|       when: on_success | ||||
|     - changes: [".gitlab/ci/rails.gitlab-ci.yml"] | ||||
|     - <<: *if-master-schedule-2-hourly | ||||
|     - <<: *if-merge-request | ||||
|       changes: [".gitlab/ci/rails.gitlab-ci.yml"] | ||||
| 
 | ||||
| .rails:rules:nightly-master-refs-code-backstage: | ||||
| .rails:rules:master-schedule-nightly--code-backstage: | ||||
|   rules: | ||||
|     - <<: *if-nightly-master-schedule | ||||
|       changes: *code-backstage-patterns | ||||
|       when: on_success | ||||
|     - changes: [".gitlab/ci/rails.gitlab-ci.yml"] | ||||
|     - <<: *if-master-schedule-nightly | ||||
|     - <<: *if-merge-request | ||||
|       changes: [".gitlab/ci/rails.gitlab-ci.yml"] | ||||
| 
 | ||||
| .rails:rules:nightly-master-refs-code-backstage-ee-only: | ||||
| .rails:rules:master-schedule-nightly--code-backstage-ee-only: | ||||
|   rules: | ||||
|     - <<: *if-not-ee | ||||
|       when: never | ||||
|     - <<: *if-nightly-master-schedule | ||||
|       changes: *code-backstage-patterns | ||||
|       when: on_success | ||||
|     - changes: [".gitlab/ci/rails.gitlab-ci.yml"] | ||||
|     - <<: *if-master-schedule-nightly | ||||
|     - <<: *if-merge-request | ||||
|       changes: [".gitlab/ci/rails.gitlab-ci.yml"] | ||||
| 
 | ||||
| .rails:rules:ee-only: | ||||
|   rules: | ||||
|  | @ -397,7 +400,6 @@ | |||
|       when: never | ||||
|     - <<: *if-default-refs | ||||
|       changes: *code-backstage-patterns | ||||
|       when: on_success | ||||
| 
 | ||||
| .rails:rules:ee-mr-and-master-only: | ||||
|   rules: | ||||
|  | @ -412,7 +414,6 @@ | |||
|   rules: | ||||
|     - <<: *if-merge-request | ||||
|       changes: *code-backstage-patterns | ||||
|       when: on_success | ||||
| 
 | ||||
| ################## | ||||
| # Releases rules # | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ cache gems: | |||
|     - .default-before_script | ||||
|     - .setup:rules:cache-gems | ||||
|   stage: test | ||||
|   needs: ["setup-test-env pg11"] | ||||
|   needs: ["setup-test-env pg9"] | ||||
|   variables: | ||||
|     SETUP_DB: "false" | ||||
|   script: | ||||
|  |  | |||
|  | @ -32,18 +32,18 @@ update-tests-metadata: | |||
|     - .test-metadata:rules:update-tests-metadata | ||||
|   stage: post-test | ||||
|   dependencies: | ||||
|     - setup-test-env pg11 | ||||
|     - rspec migration pg11 | ||||
|     - rspec unit pg11 | ||||
|     - rspec integration pg11 | ||||
|     - rspec system pg11 | ||||
|     - rspec-ee migration pg11 | ||||
|     - rspec-ee unit pg11 | ||||
|     - rspec-ee integration pg11 | ||||
|     - rspec-ee system pg11 | ||||
|     - rspec-ee unit pg11 geo | ||||
|     - rspec-ee integration pg11 geo | ||||
|     - rspec-ee system pg11 geo | ||||
|     - setup-test-env pg9 | ||||
|     - rspec migration pg9 | ||||
|     - rspec unit pg9 | ||||
|     - rspec integration pg9 | ||||
|     - rspec system pg9 | ||||
|     - rspec-ee migration pg9 | ||||
|     - rspec-ee unit pg9 | ||||
|     - rspec-ee integration pg9 | ||||
|     - rspec-ee system pg9 | ||||
|     - rspec-ee unit pg9 geo | ||||
|     - rspec-ee integration pg9 geo | ||||
|     - rspec-ee system pg9 geo | ||||
|   cache: | ||||
|     policy: push | ||||
|   script: | ||||
|  |  | |||
|  | @ -47,7 +47,8 @@ export default class PasteMarkdownTable { | |||
| 
 | ||||
|     const htmlData = this.data.getData('text/html'); | ||||
|     this.doc = new DOMParser().parseFromString(htmlData, 'text/html'); | ||||
|     const tables = this.doc.querySelectorAll('table'); | ||||
|     // Avoid formatting lines that were copied from a diff
 | ||||
|     const tables = this.doc.querySelectorAll('table:not(.diff-wrap-lines)'); | ||||
| 
 | ||||
|     // We're only looking for exactly one table. If there happens to be
 | ||||
|     // multiple tables, it's possible an application copied data into
 | ||||
|  |  | |||
|  | @ -27,12 +27,13 @@ class Projects::EnvironmentsController < Projects::ApplicationController | |||
|       format.html | ||||
|       format.json do | ||||
|         Gitlab::PollingInterval.set_header(response, interval: 3_000) | ||||
|         environments_count_by_state = project.environments.count_by_state | ||||
| 
 | ||||
|         render json: { | ||||
|           environments: serialize_environments(request, response, params[:nested]), | ||||
|           review_app: serialize_review_app, | ||||
|           available_count: project.environments.available.count, | ||||
|           stopped_count: project.environments.stopped.count | ||||
|           available_count: environments_count_by_state[:available], | ||||
|           stopped_count: environments_count_by_state[:stopped] | ||||
|         } | ||||
|       end | ||||
|     end | ||||
|  |  | |||
|  | @ -152,6 +152,14 @@ class Environment < ApplicationRecord | |||
|                .preload(:user, :metadata, :deployment) | ||||
|     end | ||||
| 
 | ||||
|     def count_by_state | ||||
|       environments_count_by_state = group(:state).count | ||||
| 
 | ||||
|       valid_states.each_with_object({}) do |state, count_hash| | ||||
|         count_hash[state] = environments_count_by_state[state.to_s] || 0 | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     private | ||||
| 
 | ||||
|     def cte_for_deployments_with_stop_action | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ | |||
|           = _('Allow repository mirroring to be configured by project maintainers') | ||||
|       %span.form-text.text-muted | ||||
|         = _('If disabled, only admins will be able to configure repository mirroring.') | ||||
|         = link_to icon('question-circle'), help_page_path('workflow/repository_mirroring') | ||||
|         = link_to icon('question-circle'), help_page_path('user/project/repository/repository_mirroring.md') | ||||
| 
 | ||||
|     = render_if_exists 'admin/application_settings/mirror_settings', form: f | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,5 @@ | |||
| - can_create_subgroups = can?(current_user, :create_subgroup, @group) | ||||
| - can_create_projects = can?(current_user, :create_projects, @group) | ||||
| - emails_disabled = @group.emails_disabled? | ||||
| 
 | ||||
| .group-home-panel | ||||
|  | @ -23,10 +24,9 @@ | |||
|       - if current_user | ||||
|         .group-buttons | ||||
|           = render 'shared/notifications/new_button', notification_setting: @notification_setting, btn_class: 'btn', emails_disabled: emails_disabled | ||||
|           - if can? current_user, :create_projects, @group | ||||
|           - new_project_label = _("New project") | ||||
|           - new_subgroup_label = _("New subgroup") | ||||
|             - if can_create_subgroups | ||||
|           - if can_create_projects and can_create_subgroups | ||||
|             .btn-group.new-project-subgroup.droplab-dropdown.home-panel-action-button.prepend-top-default.js-new-project-subgroup.qa-new-project-or-subgroup-dropdown{ data: { project_path: new_project_path(namespace_id: @group.id), subgroup_path: new_group_path(parent_id: @group.id) } } | ||||
|               %input.btn.btn-success.dropdown-primary.js-new-group-child.qa-new-in-group-button{ type: "button", value: new_project_label, data: { action: "new-project" } } | ||||
|               %button.btn.btn-success.dropdown-toggle.js-dropdown-toggle.qa-new-project-or-subgroup-dropdown-toggle{ type: "button", data: { "dropdown-trigger" => "#new-project-or-subgroup-dropdown", 'display' => 'static' } } | ||||
|  | @ -47,8 +47,10 @@ | |||
|                       .description | ||||
|                         %strong= new_subgroup_label | ||||
|                         %span= s_("GroupsTree|Create a subgroup in this group.") | ||||
|             - else | ||||
|           - elsif can_create_projects | ||||
|             = link_to new_project_label, new_project_path(namespace_id: @group.id), class: "btn btn-success prepend-top-default" | ||||
|           - elsif can_create_subgroups | ||||
|             = link_to new_subgroup_label, new_group_path(parent_id: @group.id), class: "btn btn-success prepend-top-default" | ||||
| 
 | ||||
|   - if @group.description.present? | ||||
|     .group-home-desc.mt-1 | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ | |||
|       = expanded ? _('Collapse') : _('Expand') | ||||
|     %p | ||||
|       = _('Set up your project to automatically push and/or pull changes to/from another repository. Branches, tags, and commits will be synced automatically.') | ||||
|       = link_to _('Read more'), help_page_path('workflow/repository_mirroring'), target: '_blank' | ||||
|       = link_to _('Read more'), help_page_path('user/project/repository/repository_mirroring.md'), target: '_blank' | ||||
| 
 | ||||
|   .settings-content | ||||
|     - if mirror_settings_enabled | ||||
|  |  | |||
|  | @ -0,0 +1,5 @@ | |||
| --- | ||||
| title: Always display new subgroup button when permission is granted | ||||
| merge_request: 28309 | ||||
| author: Mattias Michaux | ||||
| type: fixed | ||||
|  | @ -0,0 +1,5 @@ | |||
| --- | ||||
| title: Fix mirror repos docs link | ||||
| merge_request: 30443 | ||||
| author: | ||||
| type: fixed | ||||
|  | @ -0,0 +1,5 @@ | |||
| --- | ||||
| title: Move prepend to last line in lib/gitlab files | ||||
| merge_request: 30070 | ||||
| author: Rajendra Kadam | ||||
| type: fixed | ||||
|  | @ -0,0 +1,5 @@ | |||
| --- | ||||
| title: Move prepend to last line in lib/gitlab files | ||||
| merge_request: 29938 | ||||
| author: Rajendra | ||||
| type: fixed | ||||
|  | @ -0,0 +1,5 @@ | |||
| --- | ||||
| title: Avoid copying diffs as Markdown tables | ||||
| merge_request: 30572 | ||||
| author: | ||||
| type: fixed | ||||
|  | @ -0,0 +1,5 @@ | |||
| --- | ||||
| title: Refactor count queries to single query on Projects::EnvironmentsController | ||||
| merge_request: 30073 | ||||
| author: Sashi Kumar | ||||
| type: other | ||||
|  | @ -25,14 +25,21 @@ Server-side Git hooks are typically placed in the repository's `hooks` | |||
| subdirectory. In GitLab, hook directories are symlinked to the GitLab Shell | ||||
| `hooks` directory for ease of maintenance between GitLab Shell upgrades. | ||||
| Server hooks are implemented differently, but the behavior is exactly the same | ||||
| once the hook is created. Follow the steps below to set up a server hook for a | ||||
| once the hook is created. | ||||
| 
 | ||||
| NOTE: **Note:** | ||||
| If you are not using [hashed storage](repository_storage_types.md#hashed-storage), the project's | ||||
| repository directory might not exactly match the instructions below. In that case, | ||||
| for an installation from source the path is usually `/home/git/repositories/<group>/<project>.git`. | ||||
| For Omnibus installs the path is usually `/var/opt/gitlab/git-data/repositories/<group>/<project>.git`. | ||||
| 
 | ||||
| Follow the steps below to set up a server hook for a | ||||
| repository: | ||||
| 
 | ||||
| 1. Pick a project that needs a server hook. | ||||
| 1. On the GitLab server, navigate to the project's repository directory. | ||||
|    For an installation from source the path is usually | ||||
|    `/home/git/repositories/<group>/<project>.git`. For Omnibus installs the path is | ||||
|    usually `/var/opt/gitlab/git-data/repositories/<group>/<project>.git`. | ||||
| 1. Find that project's path on the GitLab server, by navigating to the | ||||
|    **Admin area > Projects**. From there, select the project for which you | ||||
|    would like to add a hook. You can find the path to the project's repository | ||||
|    under **Gitaly relative path** on that page. | ||||
| 1. Create a new directory in this location called `custom_hooks`. | ||||
| 1. Inside the new `custom_hooks` directory, create a file with a name matching | ||||
|    the hook type. For a pre-receive hook the file name should be `pre-receive` | ||||
|  | @ -43,8 +50,7 @@ repository: | |||
|    type. For example, if the script is in Ruby the shebang will probably be | ||||
|    `#!/usr/bin/env ruby`. | ||||
| 
 | ||||
| That's it! Assuming the hook code is properly implemented the hook will fire | ||||
| as appropriate. | ||||
| Assuming the hook code is properly implemented the hook will run as appropriate. | ||||
| 
 | ||||
| ## Set a global server hook for all repositories | ||||
| 
 | ||||
|  |  | |||
|  | @ -151,15 +151,26 @@ request, be sure to start the `dont-interrupt-me` job before pushing. | |||
| 
 | ||||
| ## PostgreSQL versions testing | ||||
| 
 | ||||
| ### Current versions testing | ||||
| 
 | ||||
| | Where? | PG version | | ||||
| | ------ | ------ | | ||||
| | MRs | 9.6 | | ||||
| | `master` (non-scheduled pipelines) | 9.6 / 11 | | ||||
| | 2-hourly scheduled pipelines | 9.6 / 11 | | ||||
| | Nightly scheduled pipeline | 9.6 / 10 | | ||||
| 
 | ||||
| ### Long-term plan | ||||
| 
 | ||||
| We follow the [PostgreSQL versions shipped with Omnibus GitLab](https://docs.gitlab.com/omnibus/package-information/postgresql_versions.html): | ||||
| 
 | ||||
| |        | 12.10 (April 2020) | 13.0 (May 2020) | 13.1 (June 2020) | 13.2 (July 2020) | 13.3 (August 2020) | 13.4, 13.5   | 13.6 (November 2020) | 14.0 (May 2021?) | | ||||
| | PG version | 12.10 (April 2020) | 13.0 (May 2020) | 13.1 (June 2020) | 13.2 (July 2020) | 13.3 (August 2020) | 13.4, 13.5   | 13.6 (November 2020) | 14.0 (May 2021?) | | ||||
| | ------ | ------------------ | --------------- | ---------------- | ---------------- | ------------------ | ------------ | -------------------- | ---------------- | | ||||
| | PG9.6  | nightly            | -               | -                | -                | -                  | -            | -                    | -                | | ||||
| | PG10   | `master`           | -               | -                | -                | -                  | -            | -                    | -                | | ||||
| | PG11   | MRs/`master`       | MRs/`master`    | MRs/`master`     | MRs/`master`     | MRs/`master`       | MRs/`master` | nightly              | -                | | ||||
| | PG12   | -                  | -               | -                | -                | `master`           | `master`     | MRs/`master`         | `master`         | | ||||
| | PG13   | -                  | -               | -                | -                | -                  | -            | -                    | MRs/`master`     | | ||||
| | PG9.6  | MRs/`master`/`2-hour`/`nightly` | -               | -                | -                | -                  | -            | -                    | -                | | ||||
| | PG10   | `nightly`           | -               | -                | -                | -                  | -            | -                    | -                | | ||||
| | PG11   | `master`/`2-hour` | MRs/`master`/`2-hour`/`nightly` | MRs/`master`/`2-hour`/`nightly` | MRs/`master`/`2-hour`/`nightly` | MRs/`master`/`2-hour`/`nightly` | MRs/`master`/`2-hour`/`nightly` | `nightly`              | -                | | ||||
| | PG12   | -                  | -               | -                | -                | `master`/`2-hour` | `master`/`2-hour` | MRs/`master`/`2-hour`/`nightly`         | `master`/`2-hour` | | ||||
| | PG13   | -                  | -               | -                | -                | -                  | -            | -                    | MRs/`master`/`2-hour`/`nightly`     | | ||||
| 
 | ||||
| ## Pipeline types | ||||
| 
 | ||||
|  |  | |||
|  | @ -224,8 +224,8 @@ pip install --index-url https://__token__:<personal_access_token>@gitlab.com/api | |||
| Where: | ||||
| 
 | ||||
| - `<package_name>` is the package name. | ||||
| - `<personal_access_token>` is your personal access token. | ||||
| - `<project_id>` is your project id number. | ||||
| - `<personal_access_token>` is a personal access token with the `read_api` scope. | ||||
| - `<project_id>` is the project id number. | ||||
| 
 | ||||
| If you were following the guide above and want to test installing the | ||||
| `MyPyPiPackage` package, you can run the following: | ||||
|  |  | |||
|  | @ -29,8 +29,6 @@ module Gitlab | |||
| 
 | ||||
|           private_constant :REASONS | ||||
| 
 | ||||
|           prepend_if_ee('::EE::Gitlab::Ci::Status::Build::Failed') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|           def status_tooltip | ||||
|             base_message | ||||
|           end | ||||
|  | @ -65,3 +63,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::Ci::Status::Build::Failed.prepend_if_ee('::EE::Gitlab::Ci::Status::Build::Failed') | ||||
|  |  | |||
|  | @ -3,8 +3,6 @@ | |||
| module Gitlab | ||||
|   module Email | ||||
|     module Handler | ||||
|       prepend_if_ee('::EE::Gitlab::Email::Handler') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|       def self.handlers | ||||
|         @handlers ||= load_handlers | ||||
|       end | ||||
|  | @ -27,3 +25,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::Email::Handler.prepend_if_ee('::EE::Gitlab::Email::Handler') | ||||
|  |  | |||
|  | @ -5,8 +5,6 @@ module Gitlab | |||
|     # The ParallelImporter schedules the importing of a GitHub project using | ||||
|     # Sidekiq. | ||||
|     class ParallelImporter | ||||
|       prepend_if_ee('::EE::Gitlab::GithubImport::ParallelImporter') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|       attr_reader :project | ||||
| 
 | ||||
|       def self.async? | ||||
|  | @ -41,3 +39,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::GithubImport::ParallelImporter.prepend_if_ee('::EE::Gitlab::GithubImport::ParallelImporter') | ||||
|  |  | |||
|  | @ -4,8 +4,6 @@ module Gitlab | |||
|   module ImportExport | ||||
|     module Project | ||||
|       class RelationFactory < Base::RelationFactory | ||||
|         prepend_if_ee('::EE::Gitlab::ImportExport::Project::RelationFactory') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|         OVERRIDES = { snippets: :project_snippets, | ||||
|                       ci_pipelines: 'Ci::Pipeline', | ||||
|                       pipelines: 'Ci::Pipeline', | ||||
|  | @ -161,3 +159,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::ImportExport::Project::RelationFactory.prepend_if_ee('::EE::Gitlab::ImportExport::Project::RelationFactory') | ||||
|  |  | |||
|  | @ -4,8 +4,6 @@ module Gitlab | |||
|   module Middleware | ||||
|     class ReadOnly | ||||
|       class Controller | ||||
|         prepend_if_ee('EE::Gitlab::Middleware::ReadOnly::Controller') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|         DISALLOWED_METHODS = %w(POST PATCH PUT DELETE).freeze | ||||
|         APPLICATION_JSON = 'application/json' | ||||
|         APPLICATION_JSON_TYPES = %W{#{APPLICATION_JSON} application/vnd.git-lfs+json}.freeze | ||||
|  | @ -144,3 +142,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::Middleware::ReadOnly::Controller.prepend_if_ee('EE::Gitlab::Middleware::ReadOnly::Controller') | ||||
|  |  | |||
|  | @ -2,8 +2,6 @@ | |||
| 
 | ||||
| module Gitlab | ||||
|   class OmniauthInitializer | ||||
|     prepend_if_ee('::EE::Gitlab::OmniauthInitializer') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|     def initialize(devise_config) | ||||
|       @devise_config = devise_config | ||||
|     end | ||||
|  | @ -121,3 +119,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::OmniauthInitializer.prepend_if_ee('::EE::Gitlab::OmniauthInitializer') | ||||
|  |  | |||
|  | @ -5,8 +5,6 @@ | |||
| module Gitlab | ||||
|   module Patch | ||||
|     module DrawRoute | ||||
|       prepend_if_ee('EE::Gitlab::Patch::DrawRoute') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|       RoutesNotFound = Class.new(StandardError) | ||||
| 
 | ||||
|       def draw(routes_name) | ||||
|  | @ -38,3 +36,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::Patch::DrawRoute.prepend_if_ee('EE::Gitlab::Patch::DrawRoute') | ||||
|  |  | |||
|  | @ -3,7 +3,6 @@ | |||
| module Gitlab | ||||
|   module Prometheus | ||||
|     class MetricGroup | ||||
|       prepend_if_ee('EE::Gitlab::Prometheus::MetricGroup') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
|       include ActiveModel::Model | ||||
| 
 | ||||
|       attr_accessor :name, :priority, :metrics | ||||
|  | @ -31,3 +30,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::Prometheus::MetricGroup.prepend_if_ee('EE::Gitlab::Prometheus::MetricGroup') | ||||
|  |  | |||
|  | @ -4,8 +4,6 @@ module Gitlab | |||
|   module Prometheus | ||||
|     module Queries | ||||
|       module QueryAdditionalMetrics | ||||
|         prepend_if_ee('EE::Gitlab::Prometheus::Queries::QueryAdditionalMetrics') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|         def query_metrics(project, environment, query_context) | ||||
|           matched_metrics(project).map(&query_group(query_context)) | ||||
|             .select(&method(:group_with_any_metrics)) | ||||
|  | @ -99,3 +97,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::Prometheus::Queries::QueryAdditionalMetrics.prepend_if_ee('EE::Gitlab::Prometheus::Queries::QueryAdditionalMetrics') | ||||
|  |  | |||
|  | @ -3,8 +3,6 @@ | |||
| module Gitlab | ||||
|   module Search | ||||
|     class ParsedQuery | ||||
|       prepend_if_ee('EE::Gitlab::Search::ParsedQuery') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|       attr_reader :term, :filters | ||||
| 
 | ||||
|       def initialize(term, filters) | ||||
|  | @ -25,3 +23,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::Search::ParsedQuery.prepend_if_ee('EE::Gitlab::Search::ParsedQuery') | ||||
|  |  | |||
|  | @ -4,8 +4,6 @@ module Gitlab | |||
|   module SlashCommands | ||||
|     module Presenters | ||||
|       module IssueBase | ||||
|         prepend_if_ee('EE::Gitlab::SlashCommands::Presenters::IssueBase') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|         def color(issuable) | ||||
|           issuable.open? ? '#38ae67' : '#d22852' | ||||
|         end | ||||
|  | @ -51,3 +49,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::SlashCommands::Presenters::IssueBase.prepend_if_ee('EE::Gitlab::SlashCommands::Presenters::IssueBase') | ||||
|  |  | |||
|  | @ -2,8 +2,6 @@ | |||
| 
 | ||||
| module Gitlab | ||||
|   class TreeSummary | ||||
|     prepend_if_ee('::EE::Gitlab::TreeSummary') # rubocop: disable Cop/InjectEnterpriseEditionModule | ||||
| 
 | ||||
|     include ::Gitlab::Utils::StrongMemoize | ||||
| 
 | ||||
|     CACHE_EXPIRE_IN = 1.hour | ||||
|  | @ -135,3 +133,5 @@ module Gitlab | |||
|     end | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| Gitlab::TreeSummary.prepend_if_ee('::EE::Gitlab::TreeSummary') | ||||
|  |  | |||
|  | @ -262,6 +262,42 @@ describe 'Group' do | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'new subgroup / project button' do | ||||
|     let(:group) { create(:group, project_creation_level: Gitlab::Access::NO_ONE_PROJECT_ACCESS, subgroup_creation_level: Gitlab::Access::OWNER_SUBGROUP_ACCESS) } | ||||
| 
 | ||||
|     it 'new subgroup button is displayed without project creation permission' do | ||||
|       visit group_path(group) | ||||
| 
 | ||||
|       page.within '.group-buttons' do | ||||
|         expect(page).to have_link('New subgroup') | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     it 'new subgroup button is displayed together with new project button when having project creation permission' do | ||||
|       group.update!(project_creation_level: Gitlab::Access::MAINTAINER_PROJECT_ACCESS) | ||||
|       visit group_path(group) | ||||
| 
 | ||||
|       page.within '.group-buttons' do | ||||
|         expect(page).to have_css("li[data-text='New subgroup']", visible: false) | ||||
|         expect(page).to have_css("li[data-text='New project']", visible: false) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     it 'new project button is displayed without subgroup creation permission' do | ||||
|       group.update!(project_creation_level: Gitlab::Access::MAINTAINER_PROJECT_ACCESS) | ||||
|       user = create(:user) | ||||
| 
 | ||||
|       group.add_maintainer(user) | ||||
|       sign_out(:user) | ||||
|       sign_in(user) | ||||
| 
 | ||||
|       visit group_path(group) | ||||
|       page.within '.group-buttons' do | ||||
|         expect(page).to have_link('New project') | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def remove_with_confirm(button_text, confirm_with) | ||||
|     click_button button_text | ||||
|     fill_in 'confirm_name_input', with: confirm_with | ||||
|  |  | |||
|  | @ -57,6 +57,18 @@ describe('PasteMarkdownTable', () => { | |||
| 
 | ||||
|       expect(new PasteMarkdownTable(data).isTable()).toBe(false); | ||||
|     }); | ||||
| 
 | ||||
|     it('returns false when the table copy comes from a diff', () => { | ||||
|       data.types = ['text/html', 'text/plain']; | ||||
|       data.getData = jest.fn().mockImplementation(mimeType => { | ||||
|         if (mimeType === 'text/html') { | ||||
|           return '<table class="diff-wrap-lines"><tr><td>First</td><td>Second</td></tr></table>'; | ||||
|         } | ||||
|         return 'First\tSecond'; | ||||
|       }); | ||||
| 
 | ||||
|       expect(new PasteMarkdownTable(data).isTable()).toBe(false); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('convertToTableMarkdown', () => { | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ import Dashboard from '~/monitoring/components/dashboard.vue'; | |||
| import DateTimePicker from '~/vue_shared/components/date_time_picker/date_time_picker.vue'; | ||||
| import CustomMetricsFormFields from '~/custom_metrics/components/custom_metrics_form_fields.vue'; | ||||
| import DashboardsDropdown from '~/monitoring/components/dashboards_dropdown.vue'; | ||||
| import EmptyState from '~/monitoring/components/empty_state.vue'; | ||||
| import GroupEmptyState from '~/monitoring/components/group_empty_state.vue'; | ||||
| import DashboardPanel from '~/monitoring/components/dashboard_panel.vue'; | ||||
| import { createStore } from '~/monitoring/stores'; | ||||
|  | @ -33,9 +34,6 @@ describe('Dashboard', () => { | |||
|   const createShallowWrapper = (props = {}, options = {}) => { | ||||
|     wrapper = shallowMount(Dashboard, { | ||||
|       propsData: { ...propsData, ...props }, | ||||
|       methods: { | ||||
|         fetchData: jest.fn(), | ||||
|       }, | ||||
|       store, | ||||
|       ...options, | ||||
|     }); | ||||
|  | @ -44,9 +42,6 @@ describe('Dashboard', () => { | |||
|   const createMountedWrapper = (props = {}, options = {}) => { | ||||
|     wrapper = mount(Dashboard, { | ||||
|       propsData: { ...propsData, ...props }, | ||||
|       methods: { | ||||
|         fetchData: jest.fn(), | ||||
|       }, | ||||
|       store, | ||||
|       stubs: ['graph-group', 'dashboard-panel'], | ||||
|       ...options, | ||||
|  | @ -56,14 +51,14 @@ describe('Dashboard', () => { | |||
|   beforeEach(() => { | ||||
|     store = createStore(); | ||||
|     mock = new MockAdapter(axios); | ||||
|     jest.spyOn(store, 'dispatch').mockResolvedValue(); | ||||
|   }); | ||||
| 
 | ||||
|   afterEach(() => { | ||||
|     if (wrapper) { | ||||
|       wrapper.destroy(); | ||||
|       wrapper = null; | ||||
|     } | ||||
|     mock.restore(); | ||||
|     if (store.dispatch.mockReset) { | ||||
|       store.dispatch.mockReset(); | ||||
|     } | ||||
|   }); | ||||
| 
 | ||||
|   describe('no metrics are available yet', () => { | ||||
|  | @ -104,9 +99,7 @@ describe('Dashboard', () => { | |||
| 
 | ||||
|   describe('request information to the server', () => { | ||||
|     it('calls to set time range and fetch data', () => { | ||||
|       jest.spyOn(store, 'dispatch'); | ||||
| 
 | ||||
|       createShallowWrapper({ hasMetrics: true }, { methods: {} }); | ||||
|       createShallowWrapper({ hasMetrics: true }); | ||||
| 
 | ||||
|       return wrapper.vm.$nextTick().then(() => { | ||||
|         expect(store.dispatch).toHaveBeenCalledWith( | ||||
|  | @ -119,10 +112,13 @@ describe('Dashboard', () => { | |||
|     }); | ||||
| 
 | ||||
|     it('shows up a loading state', () => { | ||||
|       createShallowWrapper({ hasMetrics: true }, { methods: {} }); | ||||
|       store.state.monitoringDashboard.emptyState = 'loading'; | ||||
| 
 | ||||
|       createShallowWrapper({ hasMetrics: true }); | ||||
| 
 | ||||
|       return wrapper.vm.$nextTick().then(() => { | ||||
|         expect(wrapper.vm.emptyState).toEqual('loading'); | ||||
|         expect(wrapper.find(EmptyState).exists()).toBe(true); | ||||
|         expect(wrapper.find(EmptyState).props('selectedState')).toBe('loading'); | ||||
|       }); | ||||
|     }); | ||||
| 
 | ||||
|  | @ -254,6 +250,10 @@ describe('Dashboard', () => { | |||
|       return wrapper.vm.$nextTick(); | ||||
|     }); | ||||
| 
 | ||||
|     afterEach(() => { | ||||
|       wrapper.destroy(); | ||||
|     }); | ||||
| 
 | ||||
|     it('renders a search input', () => { | ||||
|       expect(wrapper.find({ ref: 'monitorEnvironmentsDropdownSearch' }).exists()).toBe(true); | ||||
|     }); | ||||
|  | @ -322,8 +322,10 @@ describe('Dashboard', () => { | |||
|     const findRearrangeButton = () => wrapper.find('.js-rearrange-button'); | ||||
| 
 | ||||
|     beforeEach(() => { | ||||
|       createShallowWrapper({ hasMetrics: true }); | ||||
|       // call original dispatch
 | ||||
|       store.dispatch.mockRestore(); | ||||
| 
 | ||||
|       createShallowWrapper({ hasMetrics: true }); | ||||
|       setupStoreWithData(wrapper.vm.$store); | ||||
| 
 | ||||
|       return wrapper.vm.$nextTick(); | ||||
|  |  | |||
|  | @ -18,21 +18,11 @@ describe('Dashboard template', () => { | |||
|   }); | ||||
| 
 | ||||
|   afterEach(() => { | ||||
|     if (wrapper) { | ||||
|       wrapper.destroy(); | ||||
|       wrapper = null; | ||||
|     } | ||||
|     mock.restore(); | ||||
|   }); | ||||
| 
 | ||||
|   it('matches the default snapshot', () => { | ||||
|     wrapper = shallowMount(Dashboard, { | ||||
|       propsData: { ...propsData }, | ||||
|       methods: { | ||||
|         fetchData: jest.fn(), | ||||
|       }, | ||||
|       store, | ||||
|     }); | ||||
|     wrapper = shallowMount(Dashboard, { propsData: { ...propsData }, store }); | ||||
| 
 | ||||
|     expect(wrapper.element).toMatchSnapshot(); | ||||
|   }); | ||||
|  |  | |||
|  | @ -1311,4 +1311,25 @@ describe Environment, :use_clean_rails_memory_store_caching do | |||
|       expect { environment.destroy }.to change { project.commit(deployment.ref_path) }.to(nil) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '.count_by_state' do | ||||
|     context 'when environments are not empty' do | ||||
|       let!(:environment1) { create(:environment, project: project, state: 'stopped') } | ||||
|       let!(:environment2) { create(:environment, project: project, state: 'available') } | ||||
|       let!(:environment3) { create(:environment, project: project, state: 'stopped') } | ||||
| 
 | ||||
|       it 'returns the environments count grouped by state' do | ||||
|         expect(project.environments.count_by_state).to eq({ stopped: 2, available: 1 }) | ||||
|       end | ||||
| 
 | ||||
|       it 'returns the environments count grouped by state with zero value' do | ||||
|         environment2.update(state: 'stopped') | ||||
|         expect(project.environments.count_by_state).to eq({ stopped: 3, available: 0 }) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     it 'returns zero state counts when environments are empty' do | ||||
|       expect(project.environments.count_by_state).to eq({ stopped: 0, available: 0 }) | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue