ci: limit jobs by using sdl-ci-filter

[sdl-ci-filter msvc-*]
This commit is contained in:
Anonymous Maarten 2024-07-26 18:48:27 +02:00 committed by Anonymous Maarten
parent eae6758abe
commit 12eb1f1497
2 changed files with 34 additions and 2 deletions

View file

@ -23,10 +23,18 @@ jobs:
- name: 'Create plan' - name: 'Create plan'
id: plan id: plan
run: | run: |
# Adding [sdl-ci-filter GLOB] to the commit message will limit the jobs
# e.g. [sdl-ci-filter msvc-*]
EOF=$(openssl rand -hex 32)
cat >/tmp/commit_message.txt <<$EOF
${{ github.event.head_commit.message }}
$EOF
python .github/workflows/create-test-plan.py \ python .github/workflows/create-test-plan.py \
--github-variable-prefix platforms \ --github-variable-prefix platforms \
--github-ci \ --github-ci \
--verbose --verbose \
--commit-message-file /tmp/commit_message.txt
level1: level1:
needs: [controller] needs: [controller]
uses: './.github/workflows/generic.yml' uses: './.github/workflows/generic.yml'

View file

@ -1,10 +1,12 @@
#!/usr/bin/env python #!/usr/bin/env python
import argparse import argparse
import dataclasses import dataclasses
import fnmatch
from enum import Enum from enum import Enum
import json import json
import logging import logging
import os import os
import re
from typing import Optional from typing import Optional
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -595,6 +597,7 @@ def main():
parser.add_argument("--github-variable-prefix", default="platforms") parser.add_argument("--github-variable-prefix", default="platforms")
parser.add_argument("--github-ci", action="store_true") parser.add_argument("--github-ci", action="store_true")
parser.add_argument("--verbose", action="store_true") parser.add_argument("--verbose", action="store_true")
parser.add_argument("--commit-message-file")
args = parser.parse_args() args = parser.parse_args()
logging.basicConfig(level=logging.INFO if args.verbose else logging.WARNING) logging.basicConfig(level=logging.INFO if args.verbose else logging.WARNING)
@ -608,6 +611,18 @@ def main():
), ),
) )
filters = []
if args.commit_message_file:
with open(args.commit_message_file, "r") as f:
commit_message = f.read()
for m in re.finditer(r"\[sdl-ci-filter (.*)]", commit_message, flags=re.M):
filters.append(m.group(1).strip(" \t\n\r\t'\""))
if not filters:
filters.append("*")
logger.info("filters: %r", filters)
all_level_platforms = {} all_level_platforms = {}
for level_i, level_keys in enumerate(all_level_keys, 1): for level_i, level_keys in enumerate(all_level_keys, 1):
@ -619,6 +634,16 @@ def main():
all_level_platforms[level_key] = specs_to_plaform(level_specs) all_level_platforms[level_key] = specs_to_plaform(level_specs)
logger.info("=" * 80) logger.info("=" * 80)
logger.info("Keys before filter: %r", remaining_keys)
filtered_remaining_keys = set()
for filter in filters:
filtered_remaining_keys.update(fnmatch.filter(remaining_keys, filter))
logger.info("Keys after filter: %r", filtered_remaining_keys)
remaining_keys = filtered_remaining_keys
logger.info("Remaining:") logger.info("Remaining:")
remaining_specs = tuple(JOB_SPECS[key] for key in remaining_keys) remaining_specs = tuple(JOB_SPECS[key] for key in remaining_keys)
all_level_platforms["others"] = specs_to_plaform(remaining_specs) all_level_platforms["others"] = specs_to_plaform(remaining_specs)
@ -639,4 +664,3 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
raise SystemExit(main()) raise SystemExit(main())