Title: gitlab.projects.create from template creates project with unprotected main branch · python-gitlab/python-gitlab · Discussion #3038 · GitHub
Open Graph Title: gitlab.projects.create from template creates project with unprotected main branch · python-gitlab/python-gitlab · Discussion #3038
X Title: gitlab.projects.create from template creates project with unprotected main branch · python-gitlab/python-gitlab · Discussion #3038
Description: gitlab.projects.create from template creates project with unprotected main branch
Open Graph Description: Description of the problem, including code/CLI snippet I am trying to create projects in subgroups by a python script using python-gitlab. The projects are created from a template. The template pro...
X Description: Description of the problem, including code/CLI snippet I am trying to create projects in subgroups by a python script using python-gitlab. The projects are created from a template. The template pro...
Opengraph URL: https://github.com/python-gitlab/python-gitlab/discussions/3038
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"QAPage","mainEntity":{"@type":"Question","name":"gitlab.projects.create from template creates project with unprotected main branch","text":"Description of the problem, including code/CLI snippet
\nI am trying to create projects in subgroups by a python script using python-gitlab. The projects are created from a template. The template project has a single branch main that is the default and protected:
\n\nAnd Settings -> * Repository* - > Protected branches looks like this:
\n
\nThe creation of the project is done by
\nproject = gitlab.projects.create({\n\t'name': projectname,\n\t'description' : projectdescription,\n\t'namespace_id': subgroup.id,\n\t'use_custom_template': True,\n\t'group_with_project_templates_id': group_with_project_templates_id,\n\t'template_project_id': template_project_id,\n ... some more preferences\n})\n
\nAs a result I get a new project. The result of a print(project) gives
\n<class 'gitlab.v4.objects.projects.Project'> => {'id': 44638, 'description': None, 'name': '[NAME]', 'name_with_namespace': '[VALUE]', 'path': '[VALUE]', 'path_with_namespace': '[VALUE]', 'created_at': '2024-11-14T15:09:25.753Z', 'default_branch': 'main', 'tag_list': [], 'topics': [], 'ssh_url_to_repo': 'git@[VALUE].git', 'http_url_to_repo': '[VALUE].git', 'web_url': '[URL]', 'readme_url': None, 'forks_count': 0, 'avatar_url': None, 'star_count': 0, 'last_activity_at': '2024-11-14T15:09:25.717Z', 'namespace': {'id': 63056, 'name': '[VALUE]', 'path': '[VALUE]', 'kind': 'group', 'full_path': '[VALUE]', 'parent_id': 62984, 'avatar_url': None, 'web_url': '[VALUE]'}, '_links': {'self': 'https://gitlab.dlr.de/api/v4/projects/44638', 'issues': 'https://gitlab.dlr.de/api/v4/projects/44638/issues', 'merge_requests': 'https://gitlab.dlr.de/api/v4/projects/44638/merge_requests', 'repo_branches': 'https://gitlab.dlr.de/api/v4/projects/44638/repository/branches', 'labels': 'https://gitlab.dlr.de/api/v4/projects/44638/labels', 'events': 'https://gitlab.dlr.de/api/v4/projects/44638/events', 'members': 'https://gitlab.dlr.de/api/v4/projects/44638/members', 'cluster_agents': 'https://gitlab.dlr.de/api/v4/projects/44638/cluster_agents'}, 'packages_enabled': True, 'empty_repo': True, 'archived': False, 'visibility': 'private', 'resolve_outdated_diff_discussions': False, 'container_expiration_policy': {'cadence': '1d', 'enabled': False, 'keep_n': 10, 'older_than': '90d', 'name_regex': '.*', 'name_regex_keep': None, 'next_run_at': '2024-11-15T15:09:25.765Z'}, 'repository_object_format': 'sha1', 'issues_enabled': False, 'merge_requests_enabled': True, 'wiki_enabled': False, 'jobs_enabled': False, 'snippets_enabled': False, 'container_registry_enabled': False, 'service_desk_enabled': False, 'can_create_merge_request_in': True, 'issues_access_level': 'disabled', 'repository_access_level': 'enabled', 'merge_requests_access_level': 'enabled', 'forking_access_level': 'enabled', 'wiki_access_level': 'disabled', 'builds_access_level': 'disabled', 'snippets_access_level': 'disabled', 'pages_access_level': 'disabled', 'analytics_access_level': 'enabled', 'container_registry_access_level': 'disabled', 'security_and_compliance_access_level': 'private', 'releases_access_level': 'enabled', 'environments_access_level': 'enabled', 'feature_flags_access_level': 'enabled', 'infrastructure_access_level': 'enabled', 'monitor_access_level': 'enabled', 'model_experiments_access_level': 'enabled', 'model_registry_access_level': 'enabled', 'emails_disabled': False, 'emails_enabled': True, 'shared_runners_enabled': True, 'lfs_enabled': True, 'creator_id': 13620, 'import_url': None, 'import_type': 'gitlab_custom_project_template', 'import_status': 'scheduled', 'import_error': None, 'description_html': '', 'updated_at': '2024-11-14T15:05:14.750Z', 'ci_default_git_depth': 20, 'ci_forward_deployment_enabled': True, 'ci_forward_deployment_rollback_allowed': True, 'ci_job_token_scope_enabled': False, 'ci_separated_caches': True, 'ci_allow_fork_pipelines_to_run_in_parent_project': True, 'ci_id_token_sub_claim_components': ['project_path', 'ref_type', 'ref'], 'build_git_strategy': 'fetch', 'keep_latest_artifact': True, 'restrict_user_defined_variables': False, 'ci_pipeline_variables_minimum_override_role': 'maintainer', 'runners_token': None, 'runner_token_expiration_interval': None, 'group_runners_enabled': True, 'auto_cancel_pending_pipelines': 'enabled', 'build_timeout': 3600, 'auto_devops_enabled': False, 'auto_devops_deploy_strategy': 'continuous', 'ci_push_repository_for_job_token_allowed': False, 'ci_config_path': None, 'public_jobs': True, 'shared_with_groups': [], 'only_allow_merge_if_pipeline_succeeds': False, 'allow_merge_on_skipped_pipeline': None, 'request_access_enabled': True, 'only_allow_merge_if_all_discussions_are_resolved': False, 'remove_source_branch_after_merge': True, 'printing_merge_request_link_enabled': True, 'merge_method': 'merge', 'squash_option': 'default_off', 'enforce_auth_checks_on_uploads': True, 'suggestion_commit_message': None, 'merge_commit_template': None, 'squash_commit_template': None, 'issue_branch_template': None, 'warn_about_potentially_unwanted_characters': True, 'autoclose_referenced_issues': True, 'approvals_before_merge': 0, 'mirror': False, 'external_authorization_classification_label': None, 'marked_for_deletion_at': None, 'marked_for_deletion_on': None, 'requirements_enabled': False, 'requirements_access_level': 'enabled', 'security_and_compliance_enabled': True, 'pre_receive_secret_detection_enabled': False, 'compliance_frameworks': [], 'merge_requests_template': None, 'ci_restrict_pipeline_cancellation_role': 'developer', 'merge_pipelines_enabled': False, 'merge_trains_enabled': False, 'merge_trains_skip_train_allowed': False, 'allow_pipeline_trigger_approve_deployment': False}\n
\nHowever, the main branch of the project is not protected all of a sudden. If I call
\nprint(project.branches.get(project.default_branch))\n
\nI get
\n<class 'gitlab.v4.objects.branches.ProjectBranch'> => {'name': 'main', 'commit': {'id': 'c9c61bb46e2040b904ab9cc5c6f14e969b551503', 'short_id': 'c9c61bb4', 'created_at': '2024-11-13T15:24:00.000+00:00', 'parent_ids': ['d3f2686c9750ec7c49a7f1467dd0f6bf734ba378'], 'title': 'Update README.md', 'message': 'Update README.md', 'author_name': '[MYNAME]', 'author_email': '[MYMAIL]', 'authored_date': '2024-11-13T15:24:00.000+00:00', 'committer_name': '[MYNAME]', 'committer_email': '[MYMAIL]', 'committed_date': '2024-11-13T15:24:00.000+00:00', 'trailers': {}, 'extended_trailers': {}, 'web_url': '[COMMITID]'}, 'merged': False, 'protected': False, 'developers_can_push': False, 'developers_can_merge': False, 'can_push': True, 'default': True, 'web_url': '[URL]/-/tree/main'}\n
\nwith my main problem being: 'protected': False
\nExpected Behavior
\nI would expect the main branch of the newly created project to be protected.
\nActual Behavior
\nThe main branch of the newly created project is not protected. A quick look in the newly created project Settings -> * Repository* - > Protected branches confirms that there are no protected branches:
\n\nSpecifications
\n\n- python-gitlab version: 5.0.0-pyhff2d567_0
\n- Gitlab server version (or gitlab.com): GitLab Enterprise Edition v17.3.6-ee
\n
\nIs this the desired behavior? If so, how can I protect the main branch after project creation? I can add them manually in Settings -> * Repository* - > Protected branches but I would like to do that via the script. Unfortunately, I can't seem to figure out out to protect a branch after it was created from the python-gitlab api.
","upvoteCount":1,"answerCount":2,"acceptedAnswer":{"@type":"Answer","text":"\nAs I have never used a template before, are you sure that using a template means it will create a protected branch?
\n
\nWell, from my understanding the created project should be a quasi-copy of the template source. Also, I would expect any newly created project to have a protected main branch.
\n\nAs a workaround you can protect the branch after creating the project: https://python-gitlab.readthedocs.io/en/stable/gl_objects/protected_branches.html#examples
\n
\nThanks, I saw that already. Re-tried it and now I can protected the main branch after project creation with
\nmainbranch = project.protectedbranches.create({\n\t\t\t'name': project.default_branch,\n\t\t\t'merge_access_level': gitlab.const.AccessLevel.DEVELOPER,\n\t\t\t'push_access_level': gitlab.const.AccessLevel.MAINTAINER,\n\t\t})\n
","upvoteCount":2,"url":"https://github.com/python-gitlab/python-gitlab/discussions/3038#discussioncomment-11256722"}}}
| route-pattern | /:user_id/:repository/discussions/:number(.:format) |
| route-controller | discussions |
| route-action | show |
| fetch-nonce | v2:092719dc-dfab-1780-b914-58ba4bb8edd2 |
| current-catalog-service-hash | 9f0abe34da433c9b6db74bffa2466494a717b579a96b30a5d252e5090baea7be |
| request-id | DED2:1462F2:28E3F6D:387CF31:6972A570 |
| html-safe-nonce | 325b00a3caa9a8e01e24af141da1e2d0821bce3b5c3548e3a86c1594fa0ec3a3 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJERUQyOjE0NjJGMjoyOEUzRjZEOjM4N0NGMzE6Njk3MkE1NzAiLCJ2aXNpdG9yX2lkIjoiNDM1NzQ1NDY2MDk5NDUwODE0NCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 5ddc7f14971b9ec5d549c6a8c6b75202f350170e54d8861a046a59788c5a5d67 |
| hovercard-subject-tag | discussion:7483685 |
| github-keyboard-shortcuts | repository,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/python-gitlab/python-gitlab/discussions/3038 |
| twitter:image | https://opengraph.githubassets.com/5265a7b12c85f6b4a2575fb2e1cd604a3e5b728c71eed4c93ac735d41ce0885c/python-gitlab/python-gitlab/discussions/3038 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/5265a7b12c85f6b4a2575fb2e1cd604a3e5b728c71eed4c93ac735d41ce0885c/python-gitlab/python-gitlab/discussions/3038 |
| og:image:alt | Description of the problem, including code/CLI snippet I am trying to create projects in subgroups by a python script using python-gitlab. The projects are created from a template. The template pro... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | ae357919e9cc5fb635a01c9a2cc530478d3ac85f55090215eb70e1beca3385ac |
| turbo-cache-control | no-preview |
| go-import | github.com/python-gitlab/python-gitlab git https://github.com/python-gitlab/python-gitlab.git |
| octolytics-dimension-user_id | 28886265 |
| octolytics-dimension-user_login | python-gitlab |
| octolytics-dimension-repository_id | 8077625 |
| octolytics-dimension-repository_nwo | python-gitlab/python-gitlab |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 8077625 |
| octolytics-dimension-repository_network_root_nwo | python-gitlab/python-gitlab |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 625f1bd9f76a617a9c0729e2de91edb56b6ce42f |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width