Based a slugs defenition from our environment and labels for a pr, return the requeted slugs for a testrun. Environment slug defenitions can be a comma separated list. An "all" item in the list will include all os and package slugs.
(ctx, slugdef, labels)
| 664 | |
| 665 | |
| 666 | def _environment_slugs(ctx, slugdef, labels): |
| 667 | """ |
| 668 | Based a slugs defenition from our environment and labels for a pr, return |
| 669 | the requeted slugs for a testrun. |
| 670 | |
| 671 | Environment slug defenitions can be a comma separated list. An "all" item |
| 672 | in the list will include all os and package slugs. |
| 673 | """ |
| 674 | if isinstance(slugdef, list): |
| 675 | requests = slugdef |
| 676 | else: |
| 677 | requests = [_.strip().lower() for _ in slugdef.split(",") if _.strip()] |
| 678 | label_requests = [ |
| 679 | _[0].rsplit(":", 1)[1] for _ in labels if _[0].startswith("test:os:") |
| 680 | ] |
| 681 | all_slugs = set() |
| 682 | enabled_slugs = set() |
| 683 | slugs = set() |
| 684 | for platform in TEST_SALT_LISTING: |
| 685 | for osdef in TEST_SALT_LISTING[platform]: |
| 686 | all_slugs.add(osdef.slug) |
| 687 | if osdef.enabled: |
| 688 | enabled_slugs.add(osdef.slug) |
| 689 | for platform in TEST_SALT_PKG_LISTING: |
| 690 | for osdef in TEST_SALT_PKG_LISTING[platform]: |
| 691 | all_slugs.add(osdef.slug) |
| 692 | if osdef.enabled: |
| 693 | enabled_slugs.add(osdef.slug) |
| 694 | |
| 695 | if "all" in requests: |
| 696 | slugs.update(enabled_slugs) |
| 697 | requests.remove("all") |
| 698 | if "all" in label_requests: |
| 699 | slugs.update(enabled_slugs) |
| 700 | label_requests.remove("all") |
| 701 | for request in requests[:]: |
| 702 | if request.startswith("+"): |
| 703 | request = request.strip("+") |
| 704 | if request not in all_slugs: |
| 705 | ctx.warn(f"invalid slug name from environment {request}") |
| 706 | continue |
| 707 | if request in slugs: |
| 708 | ctx.info(f"slug already requested from environment {request}") |
| 709 | continue |
| 710 | slugs.add(request) |
| 711 | elif request.startswith("-"): |
| 712 | request = request.strip("-") |
| 713 | if request not in all_slugs: |
| 714 | ctx.warn(f"invalid slug name from environment {request}") |
| 715 | continue |
| 716 | if request in slugs: |
| 717 | slugs.remove(request) |
| 718 | else: |
| 719 | ctx.info(f"slug from environment was never requested {request}") |
| 720 | else: |
| 721 | if request not in all_slugs: |
| 722 | ctx.warn(f"invalid slug name from environment {request}") |
| 723 | continue |