mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Allow choosing which OS to run tests against using labels
This commit is contained in:
parent
0d27cf6c1f
commit
fb58df01f4
9 changed files with 1186 additions and 38 deletions
1136
.github/workflows/ci.yml
vendored
1136
.github/workflows/ci.yml
vendored
File diff suppressed because it is too large
Load diff
3
.github/workflows/nightly.yml
vendored
3
.github/workflows/nightly.yml
vendored
|
@ -87,7 +87,8 @@ jobs:
|
|||
jobs: ${{ steps.define-jobs.outputs.jobs }}
|
||||
runners: ${{ steps.runner-types.outputs.runners }}
|
||||
changed-files: ${{ steps.process-changed-files.outputs.changed-files }}
|
||||
pull-labels: ${{ steps.get-pull-labels.outputs.labels }}
|
||||
os-labels: ${{ steps.get-pull-labels.outputs.os-labels }}
|
||||
pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }}
|
||||
testrun: ${{ steps.define-testrun.outputs.testrun }}
|
||||
salt-version: ${{ steps.setup-salt-version.outputs.salt-version }}
|
||||
cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }}
|
||||
|
|
3
.github/workflows/scheduled.yml
vendored
3
.github/workflows/scheduled.yml
vendored
|
@ -77,7 +77,8 @@ jobs:
|
|||
jobs: ${{ steps.define-jobs.outputs.jobs }}
|
||||
runners: ${{ steps.runner-types.outputs.runners }}
|
||||
changed-files: ${{ steps.process-changed-files.outputs.changed-files }}
|
||||
pull-labels: ${{ steps.get-pull-labels.outputs.labels }}
|
||||
os-labels: ${{ steps.get-pull-labels.outputs.os-labels }}
|
||||
pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }}
|
||||
testrun: ${{ steps.define-testrun.outputs.testrun }}
|
||||
salt-version: ${{ steps.setup-salt-version.outputs.salt-version }}
|
||||
cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }}
|
||||
|
|
3
.github/workflows/staging.yml
vendored
3
.github/workflows/staging.yml
vendored
|
@ -73,7 +73,8 @@ jobs:
|
|||
jobs: ${{ steps.define-jobs.outputs.jobs }}
|
||||
runners: ${{ steps.runner-types.outputs.runners }}
|
||||
changed-files: ${{ steps.process-changed-files.outputs.changed-files }}
|
||||
pull-labels: ${{ steps.get-pull-labels.outputs.labels }}
|
||||
os-labels: ${{ steps.get-pull-labels.outputs.os-labels }}
|
||||
pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }}
|
||||
testrun: ${{ steps.define-testrun.outputs.testrun }}
|
||||
salt-version: ${{ steps.setup-salt-version.outputs.salt-version }}
|
||||
cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }}
|
||||
|
|
3
.github/workflows/templates/layout.yml.jinja
vendored
3
.github/workflows/templates/layout.yml.jinja
vendored
|
@ -91,7 +91,8 @@ jobs:
|
|||
jobs: ${{ steps.define-jobs.outputs.jobs }}
|
||||
runners: ${{ steps.runner-types.outputs.runners }}
|
||||
changed-files: ${{ steps.process-changed-files.outputs.changed-files }}
|
||||
pull-labels: ${{ steps.get-pull-labels.outputs.labels }}
|
||||
os-labels: ${{ steps.get-pull-labels.outputs.os-labels }}
|
||||
pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }}
|
||||
testrun: ${{ steps.define-testrun.outputs.testrun }}
|
||||
salt-version: ${{ steps.setup-salt-version.outputs.salt-version }}
|
||||
cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }}
|
||||
|
|
|
@ -4,7 +4,11 @@
|
|||
<{ job_name }>:
|
||||
<%- do test_salt_pkg_needs.append(job_name) %>
|
||||
name: <{ display_name }> Package Test
|
||||
<%- if workflow_slug != "ci" or slug in mandatory_os %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }}
|
||||
<%- else %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }}
|
||||
<%- endif %>
|
||||
needs:
|
||||
- prepare-workflow
|
||||
- build-pkgs-onedir
|
||||
|
@ -36,7 +40,11 @@
|
|||
<{ job_name }>:
|
||||
<%- do test_salt_pkg_needs.append(job_name) %>
|
||||
name: <{ display_name }> Package Test
|
||||
<%- if workflow_slug != "ci" or slug in mandatory_os %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }}
|
||||
<%- else %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }}
|
||||
<%- endif %>
|
||||
needs:
|
||||
- prepare-workflow
|
||||
- build-pkgs-onedir
|
||||
|
@ -65,7 +73,11 @@
|
|||
<{ job_name }>:
|
||||
<%- do test_salt_pkg_needs.append(job_name) %>
|
||||
name: <{ display_name }> <{ pkg_type }> Package Test
|
||||
<%- if workflow_slug != "ci" or slug in mandatory_os %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }}
|
||||
<%- else %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }}
|
||||
<%- endif %>
|
||||
needs:
|
||||
- prepare-workflow
|
||||
- build-pkgs-onedir
|
||||
|
|
12
.github/workflows/templates/test-salt.yml.jinja
vendored
12
.github/workflows/templates/test-salt.yml.jinja
vendored
|
@ -9,7 +9,11 @@
|
|||
<{ slug.replace(".", "") }>:
|
||||
<%- do test_salt_needs.append(slug.replace(".", "")) %>
|
||||
name: <{ display_name }> Test
|
||||
<%- if workflow_slug != "ci" or slug in mandatory_os %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }}
|
||||
<%- else %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }}
|
||||
<%- endif %>
|
||||
needs:
|
||||
- prepare-workflow
|
||||
- build-ci-deps
|
||||
|
@ -36,7 +40,11 @@
|
|||
<{ slug.replace(".", "") }>:
|
||||
<%- do test_salt_needs.append(slug.replace(".", "")) %>
|
||||
name: <{ display_name }> Test
|
||||
<%- if workflow_slug != "ci" or slug in mandatory_os %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }}
|
||||
<%- else %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }}
|
||||
<%- endif %>
|
||||
needs:
|
||||
- prepare-workflow
|
||||
- build-ci-deps
|
||||
|
@ -62,7 +70,11 @@
|
|||
<{ slug.replace(".", "") }>:
|
||||
<%- do test_salt_needs.append(slug.replace(".", "")) %>
|
||||
name: <{ display_name }> Test
|
||||
<%- if workflow_slug != "ci" or slug in mandatory_os %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }}
|
||||
<%- else %>
|
||||
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }}
|
||||
<%- endif %>
|
||||
needs:
|
||||
- prepare-workflow
|
||||
- build-ci-deps
|
||||
|
|
10
tools/ci.py
10
tools/ci.py
|
@ -949,10 +949,15 @@ def get_pr_test_labels(
|
|||
pr = gh_event["pull_request"]["number"]
|
||||
labels = _get_pr_test_labels_from_event_payload(gh_event)
|
||||
|
||||
os_labels = []
|
||||
test_labels = []
|
||||
if labels:
|
||||
ctx.info(f"Test labels for pull-request #{pr} on {repository}:")
|
||||
for name, description in labels:
|
||||
for name, description in sorted(labels):
|
||||
ctx.info(f" * [yellow]{name}[/yellow]: {description}")
|
||||
test_labels.append(name)
|
||||
if name.startswith("test:os:"):
|
||||
os_labels.append(name.split("test:os:", 1)[-1])
|
||||
else:
|
||||
ctx.info(f"No test labels for pull-request #{pr} on {repository}")
|
||||
|
||||
|
@ -965,7 +970,8 @@ def get_pr_test_labels(
|
|||
|
||||
ctx.info("Writing 'labels' to the github outputs file")
|
||||
with open(github_output, "a", encoding="utf-8") as wfh:
|
||||
wfh.write(f"labels={json.dumps([label[0] for label in labels])}\n")
|
||||
wfh.write(f"os-labels={json.dumps([label for label in os_labels])}\n")
|
||||
wfh.write(f"test-labels={json.dumps([label for label in test_labels])}\n")
|
||||
ctx.exit(0)
|
||||
|
||||
|
||||
|
|
|
@ -317,21 +317,23 @@ def generate_workflows(ctx: Context):
|
|||
"test_repo_needs": NeedsTracker(),
|
||||
"prepare_workflow_needs": NeedsTracker(),
|
||||
"build_repo_needs": NeedsTracker(),
|
||||
"test_salt_listing": _filter_jobs_by_workflow(
|
||||
workflow_slug, test_salt_listing
|
||||
),
|
||||
"test_salt_pkg_listing": _filter_jobs_by_workflow(
|
||||
workflow_slug, test_salt_pkg_listing
|
||||
),
|
||||
"test_salt_listing": test_salt_listing,
|
||||
"test_salt_pkg_listing": test_salt_pkg_listing,
|
||||
"build_ci_deps_listing": build_ci_deps_listing,
|
||||
"test_salt_pkg_downloads_listing": _filter_jobs_by_workflow(
|
||||
workflow_slug, test_salt_pkg_downloads_listing
|
||||
),
|
||||
"test_salt_pkg_downloads_listing": test_salt_pkg_downloads_listing,
|
||||
"test_salt_pkg_downloads_needs_slugs": sorted(
|
||||
test_salt_pkg_downloads_needs_slugs
|
||||
),
|
||||
"build_rpms_listing": build_rpms_listing,
|
||||
"build_debs_listing": build_debs_listing,
|
||||
"mandatory_os": (
|
||||
"almalinux-9",
|
||||
"amazonlinux-2023-arm64",
|
||||
"archlinux-lts",
|
||||
"macos-13",
|
||||
"ubuntu-22.04-arm64",
|
||||
"windows-2022",
|
||||
),
|
||||
}
|
||||
shared_context_file = (
|
||||
tools.utils.REPO_ROOT / "cicd" / "shared-gh-workflows-context.yml"
|
||||
|
@ -344,28 +346,6 @@ def generate_workflows(ctx: Context):
|
|||
workflow_path.write_text(rendered_template.rstrip() + "\n")
|
||||
|
||||
|
||||
def _filter_jobs_by_workflow(
|
||||
workflow_slug: str, jobs: dict
|
||||
) -> dict[str, list[tuple[str, str, str]]]:
|
||||
short_worflow_os = (
|
||||
"almalinux-9",
|
||||
"amazonlinux-2023-arm64",
|
||||
"ubuntu-22.04-arm64",
|
||||
"windows-2022",
|
||||
"macos-13",
|
||||
"archlinux-lts",
|
||||
)
|
||||
if workflow_slug != "ci":
|
||||
return jobs
|
||||
|
||||
selected: dict[str, list[tuple[str, str, str]]] = {}
|
||||
for platform in jobs:
|
||||
for entry in jobs[platform]:
|
||||
if entry[0] in short_worflow_os:
|
||||
selected.setdefault(platform, []).append(entry)
|
||||
return selected
|
||||
|
||||
|
||||
@cgroup.command(
|
||||
name="actionlint",
|
||||
arguments={
|
||||
|
|
Loading…
Add table
Reference in a new issue