v4-0002-ci-Simplify-ci-os-only-handling.patch
text/x-patch
Filename: v4-0002-ci-Simplify-ci-os-only-handling.patch
Type: text/x-patch
Part: 1
Patch
Format: format-patch
Series: patch v4-0002
Subject: ci: Simplify ci-os-only handling
| File | + | − |
|---|---|---|
| .cirrus.star | 30 | 1 |
| .cirrus.tasks.yml | 10 | 11 |
From f83dc32773290bfd5ccdade259d810adf2cfc456 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Fri, 12 Apr 2024 18:18:34 -0700
Subject: [PATCH v4 2/2] 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
---
.cirrus.star | 31 ++++++++++++++++++++++++++++++-
.cirrus.tasks.yml | 21 ++++++++++-----------
2 files changed, 40 insertions(+), 12 deletions(-)
diff --git a/.cirrus.star b/.cirrus.star
index 218fce887b5..83e93e48d5f 100644
--- a/.cirrus.star
+++ b/.cirrus.star
@@ -7,7 +7,7 @@ https://github.com/bazelbuild/starlark/blob/master/spec.md
See also .cirrus.yml and src/tools/ci/README
"""
-load("cirrus", "env", "fs", "yaml")
+load("cirrus", "env", "fs", "re", "yaml")
def main():
@@ -66,6 +66,7 @@ def main():
def compute_environment_vars():
cenv = {}
+ ###
# The following tasks are manually triggered by default because they
# might use too many resources for users of free Cirrus credits, but you can
# trigger them automatically by naming them in an environment variable eg
@@ -82,6 +83,34 @@ def compute_environment_vars():
else:
value = 'manual'
cenv[name] = value
+ ###
+
+ ###
+ # Parse "ci-os-only:" tag in commit message and set
+ # CI_{$OS}_ENABLED variable for each OS
+
+ # We want to disable SanityCheck if testing just a specific OS. This
+ # shortens push-wait-for-ci cycle time a bit when debugging operating
+ # system specific failures. Just treating it as an OS in that case
+ # suffices.
+
+ operating_systems = ['freebsd', 'netbsd', 'openbsd', 'linux', 'macos',
+ 'windows', 'mingw', 'sanitycheck', 'compilerwarnings']
+ 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
diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml
index f5ff0ccf222..fbaf074b13c 100644
--- a/.cirrus.tasks.yml
+++ b/.cirrus.tasks.yml
@@ -62,7 +62,7 @@ task:
# push-wait-for-ci cycle time a bit when debugging operating system specific
# failures. Uses skip instead of only_if, as cirrus otherwise warns about
# only_if conditions not matching.
- skip: $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:.*'
+ skip: $CI_SANITYCHECK_ENABLED == false
env:
CPUS: 4
@@ -145,7 +145,7 @@ task:
<<: *freebsd_task_template
depends_on: SanityCheck
- only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*freebsd.*'
+ only_if: $CI_FREEBSD_ENABLED
sysinfo_script: |
id
@@ -237,7 +237,7 @@ task:
- name: NetBSD - Meson
# See REPO_CI_AUTOMATIC_TRIGGER_TASKS in .cirrus.star
trigger_type: $CI_TRIGGER_TYPE_NETBSD
- only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*netbsd.*'
+ only_if: $CI_NETBSD_ENABLED
env:
OS_NAME: netbsd
IMAGE_FAMILY: pg-ci-netbsd-postgres
@@ -256,7 +256,7 @@ task:
- name: OpenBSD - Meson
# See REPO_CI_AUTOMATIC_TRIGGER_TASKS in .cirrus.star
trigger_type: $CI_TRIGGER_TYPE_OPENBSD
- only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*openbsd.*'
+ only_if: $CI_OPENBSD_ENABLED
env:
OS_NAME: openbsd
IMAGE_FAMILY: pg-ci-openbsd-postgres
@@ -395,7 +395,7 @@ task:
<<: *linux_task_template
depends_on: SanityCheck
- only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*linux.*'
+ only_if: $CI_LINUX_ENABLED
ccache_cache:
folder: ${CCACHE_DIR}
@@ -568,7 +568,7 @@ task:
<<: *macos_task_template
depends_on: SanityCheck
- 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: |
id
@@ -674,7 +674,7 @@ task:
<<: *windows_task_template
depends_on: SanityCheck
- only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*windows.*'
+ only_if: $CI_WINDOWS_ENABLED
setup_additional_packages_script: |
REM choco install -y --no-progress ...
@@ -713,7 +713,7 @@ task:
trigger_type: $CI_TRIGGER_TYPE_MINGW
depends_on: SanityCheck
- only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*' || $CIRRUS_CHANGE_MESSAGE =~ '.*\nci-os-only:[^\n]*mingw.*'
+ only_if: $CI_MINGW_ENABLED
env:
TEST_JOBS: 4 # higher concurrency causes occasional failures
@@ -767,10 +767,9 @@ task:
# To limit unnecessary work only run this once the SanityCheck
# succeeds. This is particularly important for this task as we intentionally
- # use always: to continue after failures. Task that did not run count as a
- # success, so we need to recheck SanityChecks's condition here ...
+ # use always: to continue after failures.
depends_on: SanityCheck
- only_if: $CIRRUS_CHANGE_MESSAGE !=~ '.*\nci-os-only:.*'
+ only_if: $CI_COMPILERWARNINGS_ENABLED
env:
CPUS: 4
--
2.47.2