mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	ci: Simplify ci-os-only handling
Handle 'ci-os-only' occurrences in the .cirrus.star file instead of .cirrus.tasks.yml file. Now, 'ci-os-only' occurrences are controlled from one central place instead of dealing with them in each task. Author: Andres Freund <andres@anarazel.de> Reviewed-by: Nazir Bilal Yavuz <byavuz81@gmail.com> Discussion: https://postgr.es/m/20240413021221.hg53rvqlvldqh57i%40awork3.anarazel.de Backpatch: 15-, where CI support was added
This commit is contained in:
		
							
								
								
									
										30
									
								
								.cirrus.star
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								.cirrus.star
									
									
									
									
									
								
							| @@ -7,7 +7,7 @@ https://github.com/bazelbuild/starlark/blob/master/spec.md | |||||||
| See also .cirrus.yml and src/tools/ci/README | See also .cirrus.yml and src/tools/ci/README | ||||||
| """ | """ | ||||||
|  |  | ||||||
| load("cirrus", "env", "fs", "yaml") | load("cirrus", "env", "fs", "re", "yaml") | ||||||
|  |  | ||||||
|  |  | ||||||
| def main(): | def main(): | ||||||
| @@ -66,6 +66,7 @@ def main(): | |||||||
| def compute_environment_vars(): | def compute_environment_vars(): | ||||||
|     cenv = {} |     cenv = {} | ||||||
|  |  | ||||||
|  |     ### | ||||||
|     # Some tasks are manually triggered by default because they might use too |     # Some tasks are manually triggered by default because they might use too | ||||||
|     # many resources for users of free Cirrus credits, but they can be |     # many resources for users of free Cirrus credits, but they can be | ||||||
|     # triggered automatically by naming them in an environment variable e.g. |     # triggered automatically by naming them in an environment variable e.g. | ||||||
| @@ -82,6 +83,33 @@ def compute_environment_vars(): | |||||||
|         else: |         else: | ||||||
|             value = 'manual' |             value = 'manual' | ||||||
|         cenv[name] = value |         cenv[name] = value | ||||||
|  |     ### | ||||||
|  |  | ||||||
|  |     ### | ||||||
|  |     # Parse "ci-os-only:" tag in commit message and set | ||||||
|  |     # CI_{$OS}_ENABLED variable for each OS | ||||||
|  |  | ||||||
|  |     operating_systems = [ | ||||||
|  |       'freebsd', | ||||||
|  |       'linux', | ||||||
|  |       'macos', | ||||||
|  |       'windows', | ||||||
|  |     ] | ||||||
|  |     commit_message = env.get('CIRRUS_CHANGE_MESSAGE') | ||||||
|  |     match_re = r"(^|.*\n)ci-os-only: ([^\n]+)($|\n.*)" | ||||||
|  |  | ||||||
|  |     # re.match() returns an array with a tuple of (matched-string, match_1, ...) | ||||||
|  |     m = re.match(match_re, commit_message) | ||||||
|  |     if m and len(m) > 0: | ||||||
|  |         os_only = m[0][2] | ||||||
|  |         os_only_list = re.split(r'[, ]+', os_only) | ||||||
|  |     else: | ||||||
|  |         os_only_list = operating_systems | ||||||
|  |  | ||||||
|  |     for os in operating_systems: | ||||||
|  |         os_enabled = os in os_only_list | ||||||
|  |         cenv['CI_{0}_ENABLED'.format(os.upper())] = os_enabled | ||||||
|  |     ### | ||||||
|  |  | ||||||
|     return cenv |     return cenv | ||||||
|  |  | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ task: | |||||||
|  |  | ||||||
|   <<: *freebsd_task_template |   <<: *freebsd_task_template | ||||||
|  |  | ||||||
|   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*freebsd.*' |   only_if: $CI_FREEBSD_ENABLED | ||||||
|  |  | ||||||
|   sysinfo_script: | |   sysinfo_script: | | ||||||
|     id |     id | ||||||
| @@ -153,7 +153,7 @@ task: | |||||||
|  |  | ||||||
|   <<: *linux_task_template |   <<: *linux_task_template | ||||||
|  |  | ||||||
|   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*linux.*' |   only_if: $CI_LINUX_ENABLED | ||||||
|  |  | ||||||
|   ccache_cache: |   ccache_cache: | ||||||
|     folder: ${CCACHE_DIR} |     folder: ${CCACHE_DIR} | ||||||
| @@ -239,7 +239,7 @@ task: | |||||||
|  |  | ||||||
|   <<: *macos_task_template |   <<: *macos_task_template | ||||||
|  |  | ||||||
|   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*(macos|darwin|osx).*' |   only_if: $CI_MACOS_ENABLED | ||||||
|  |  | ||||||
|   sysinfo_script: | |   sysinfo_script: | | ||||||
|     id |     id | ||||||
| @@ -389,7 +389,7 @@ task: | |||||||
|  |  | ||||||
|   <<: *windows_task_template |   <<: *windows_task_template | ||||||
|  |  | ||||||
|   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*windows.*' |   only_if: $CI_WINDOWS_ENABLED | ||||||
|  |  | ||||||
|   sysinfo_script: | |   sysinfo_script: | | ||||||
|     chcp |     chcp | ||||||
| @@ -476,7 +476,7 @@ task: | |||||||
|  |  | ||||||
|   # task that did not run, count as a success, so we need to recheck Linux' |   # task that did not run, count as a success, so we need to recheck Linux' | ||||||
|   # condition here ... |   # condition here ... | ||||||
|   only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*linux.*' |   only_if: $CI_LINUX_ENABLED | ||||||
|  |  | ||||||
|   <<: *linux_task_template |   <<: *linux_task_template | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user