Add build_git_strategy attribute to project API
We map the boolean to the string 'fetch' or 'clone', to be more explicit.
This commit is contained in:
		
							parent
							
								
									26b7b47558
								
							
						
					
					
						commit
						353e68772c
					
				|  | @ -0,0 +1,10 @@ | ||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | # Add methods used by the projects API | ||||||
|  | module ProjectAPICompatibility | ||||||
|  |   extend ActiveSupport::Concern | ||||||
|  | 
 | ||||||
|  |   def build_git_strategy=(value) | ||||||
|  |     write_attribute(:build_allow_git_fetch, value == 'fetch') | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | @ -15,6 +15,7 @@ class Project < ApplicationRecord | ||||||
|   include CaseSensitivity |   include CaseSensitivity | ||||||
|   include TokenAuthenticatable |   include TokenAuthenticatable | ||||||
|   include ValidAttribute |   include ValidAttribute | ||||||
|  |   include ProjectAPICompatibility | ||||||
|   include ProjectFeaturesCompatibility |   include ProjectFeaturesCompatibility | ||||||
|   include SelectForProjectAuthorization |   include SelectForProjectAuthorization | ||||||
|   include Presentable |   include Presentable | ||||||
|  |  | ||||||
|  | @ -733,6 +733,7 @@ POST /projects | ||||||
| | `tag_list`    | array   | no       | The list of tags for a project; put array of tags, that should be finally assigned to a project | | | `tag_list`    | array   | no       | The list of tags for a project; put array of tags, that should be finally assigned to a project | | ||||||
| | `avatar`    | mixed   | no      | Image file for avatar of the project                | | | `avatar`    | mixed   | no      | Image file for avatar of the project                | | ||||||
| | `printing_merge_request_link_enabled` | boolean | no | Show link to create/view merge request when pushing from the command line | | | `printing_merge_request_link_enabled` | boolean | no | Show link to create/view merge request when pushing from the command line | | ||||||
|  | | `build_git_strategy` | string | no | The Git strategy. Defaults to `fetch` | | ||||||
| | `ci_config_path` | string | no | The path to CI config file | | | `ci_config_path` | string | no | The path to CI config file | | ||||||
| | `repository_storage` | string | no | Which storage shard the repository is on. Available only to admins | | | `repository_storage` | string | no | Which storage shard the repository is on. Available only to admins | | ||||||
| | `approvals_before_merge` | integer | no | **[STARTER]** How many approvers should approve merge requests by default | | | `approvals_before_merge` | integer | no | **[STARTER]** How many approvers should approve merge requests by default | | ||||||
|  | @ -784,6 +785,7 @@ POST /projects/user/:user_id | ||||||
| | `tag_list`    | array   | no       | The list of tags for a project; put array of tags, that should be finally assigned to a project | | | `tag_list`    | array   | no       | The list of tags for a project; put array of tags, that should be finally assigned to a project | | ||||||
| | `avatar`    | mixed   | no      | Image file for avatar of the project                | | | `avatar`    | mixed   | no      | Image file for avatar of the project                | | ||||||
| | `printing_merge_request_link_enabled` | boolean | no | Show link to create/view merge request when pushing from the command line | | | `printing_merge_request_link_enabled` | boolean | no | Show link to create/view merge request when pushing from the command line | | ||||||
|  | | `build_git_strategy` | string | no | The Git strategy. Defaults to `fetch` | | ||||||
| | `ci_config_path` | string | no | The path to CI config file | | | `ci_config_path` | string | no | The path to CI config file | | ||||||
| | `repository_storage` | string | no | Which storage shard the repository is on. Available only to admins | | | `repository_storage` | string | no | Which storage shard the repository is on. Available only to admins | | ||||||
| | `approvals_before_merge` | integer | no | **[STARTER]** How many approvers should approve merge requests by default | | | `approvals_before_merge` | integer | no | **[STARTER]** How many approvers should approve merge requests by default | | ||||||
|  | @ -834,6 +836,7 @@ PUT /projects/:id | ||||||
| | `request_access_enabled` | boolean | no | Allow users to request member access | | | `request_access_enabled` | boolean | no | Allow users to request member access | | ||||||
| | `tag_list`    | array   | no       | The list of tags for a project; put array of tags, that should be finally assigned to a project | | | `tag_list`    | array   | no       | The list of tags for a project; put array of tags, that should be finally assigned to a project | | ||||||
| | `avatar`    | mixed   | no      | Image file for avatar of the project                | | | `avatar`    | mixed   | no      | Image file for avatar of the project                | | ||||||
|  | | `build_git_strategy` | string | no | The Git strategy. Defaults to `fetch` | | ||||||
| | `ci_config_path` | string | no | The path to CI config file | | | `ci_config_path` | string | no | The path to CI config file | | ||||||
| | `ci_default_git_depth` | integer | no | Default number of revisions for [shallow cloning](../user/project/pipelines/settings.md#git-shallow-clone) | | | `ci_default_git_depth` | integer | no | Default number of revisions for [shallow cloning](../user/project/pipelines/settings.md#git-shallow-clone) | | ||||||
| | `repository_storage` | string | no | Which storage shard the repository is on. Available only to admins | | | `repository_storage` | string | no | Which storage shard the repository is on. Available only to admins | | ||||||
|  |  | ||||||
|  | @ -275,6 +275,9 @@ module API | ||||||
|       expose :runners_token, if: lambda { |_project, options| options[:user_can_admin_project] } |       expose :runners_token, if: lambda { |_project, options| options[:user_can_admin_project] } | ||||||
|       expose :ci_default_git_depth |       expose :ci_default_git_depth | ||||||
|       expose :public_builds, as: :public_jobs |       expose :public_builds, as: :public_jobs | ||||||
|  |       expose :build_git_strategy, if: lambda { |project, options| options[:user_can_admin_project] } do |project, options| | ||||||
|  |         project.build_allow_git_fetch ? 'fetch' : 'clone' | ||||||
|  |       end | ||||||
|       expose :ci_config_path, if: -> (project, options) { Ability.allowed?(options[:current_user], :download_code, project) } |       expose :ci_config_path, if: -> (project, options) { Ability.allowed?(options[:current_user], :download_code, project) } | ||||||
|       expose :shared_with_groups do |project, options| |       expose :shared_with_groups do |project, options| | ||||||
|         SharedGroup.represent(project.project_group_links, options) |         SharedGroup.represent(project.project_group_links, options) | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ module API | ||||||
| 
 | 
 | ||||||
|       params :optional_project_params_ce do |       params :optional_project_params_ce do | ||||||
|         optional :description, type: String, desc: 'The description of the project' |         optional :description, type: String, desc: 'The description of the project' | ||||||
|  |         optional :build_git_strategy, type: String, values: %w(fetch clone), desc: 'The Git strategy. Defaults to `fetch`' | ||||||
|         optional :ci_config_path, type: String, desc: 'The path to CI config file. Defaults to `.gitlab-ci.yml`' |         optional :ci_config_path, type: String, desc: 'The path to CI config file. Defaults to `.gitlab-ci.yml`' | ||||||
| 
 | 
 | ||||||
|         # TODO: remove in API v5, replaced by *_access_level |         # TODO: remove in API v5, replaced by *_access_level | ||||||
|  | @ -58,6 +59,7 @@ module API | ||||||
| 
 | 
 | ||||||
|       def self.update_params_at_least_one_of |       def self.update_params_at_least_one_of | ||||||
|         [ |         [ | ||||||
|  |           :build_git_strategy, | ||||||
|           :builds_access_level, |           :builds_access_level, | ||||||
|           :ci_config_path, |           :ci_config_path, | ||||||
|           :container_registry_enabled, |           :container_registry_enabled, | ||||||
|  |  | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | require 'spec_helper' | ||||||
|  | 
 | ||||||
|  | describe ProjectAPICompatibility do | ||||||
|  |   let(:project) { create(:project) } | ||||||
|  | 
 | ||||||
|  |   it "converts build_git_strategy=fetch to build_allow_git_fetch=true" do | ||||||
|  |     project.update!(:build_git_strategy, 'fetch') | ||||||
|  |     expect(project.build_allow_git_fetch).to eq(true) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   it "converts build_git_strategy=clone to build_allow_git_fetch=false" do | ||||||
|  |     project.update!(:build_git_strategy, 'clone') | ||||||
|  |     expect(project.build_allow_git_fetch).to eq(false) | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | @ -1929,6 +1929,24 @@ describe API::Projects do | ||||||
|         expect(json_response['builds_access_level']).to eq('private') |         expect(json_response['builds_access_level']).to eq('private') | ||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|  |       it 'updates build_git_strategy' do | ||||||
|  |         project_param = { build_git_strategy: 'clone' } | ||||||
|  | 
 | ||||||
|  |         put api("/projects/#{project3.id}", user), params: project_param | ||||||
|  | 
 | ||||||
|  |         expect(response).to have_gitlab_http_status(200) | ||||||
|  | 
 | ||||||
|  |         expect(json_response['build_git_strategy']).to eq('clone') | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       it 'rejects to update build_git_strategy when build_git_strategy is invalid' do | ||||||
|  |         project_param = { build_git_strategy: 'invalid' } | ||||||
|  | 
 | ||||||
|  |         put api("/projects/#{project3.id}", user), params: project_param | ||||||
|  | 
 | ||||||
|  |         expect(response).to have_gitlab_http_status(400) | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|       it 'updates merge_method' do |       it 'updates merge_method' do | ||||||
|         project_param = { merge_method: 'ff' } |         project_param = { merge_method: 'ff' } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue