|
26 | 26 | from redis_release.bht.state import reset_model_to_defaults |
27 | 27 |
|
28 | 28 | from ..github_client_async import GitHubClientAsync |
29 | | -from ..models import ( |
30 | | - HomebrewChannel, |
31 | | - PackageType, |
32 | | - RedisVersion, |
33 | | - ReleaseType, |
34 | | - WorkflowConclusion, |
35 | | - WorkflowStatus, |
36 | | -) |
| 29 | +from ..models import RedisVersion, ReleaseType, WorkflowConclusion, WorkflowStatus |
37 | 30 | from .logging_wrapper import PyTreesLoggerWrapper |
38 | | -from .state import HomebrewMeta, Package, PackageMeta, ReleaseMeta, Workflow |
| 31 | +from .state import Package, PackageMeta, ReleaseMeta, Workflow |
39 | 32 |
|
40 | 33 | logger = logging.getLogger(__name__) |
41 | 34 |
|
@@ -721,273 +714,6 @@ def update(self) -> Status: |
721 | 714 | return Status.SUCCESS |
722 | 715 |
|
723 | 716 |
|
724 | | -class DockerWorkflowInputs(ReleaseAction): |
725 | | - """ |
726 | | - Docker uses only release_tag input which is set automatically in TriggerWorkflow |
727 | | - """ |
728 | | - |
729 | | - def __init__( |
730 | | - self, |
731 | | - name: str, |
732 | | - workflow: Workflow, |
733 | | - package_meta: PackageMeta, |
734 | | - release_meta: ReleaseMeta, |
735 | | - log_prefix: str = "", |
736 | | - ) -> None: |
737 | | - self.workflow = workflow |
738 | | - self.package_meta = package_meta |
739 | | - self.release_meta = release_meta |
740 | | - super().__init__(name=name, log_prefix=log_prefix) |
741 | | - |
742 | | - def update(self) -> Status: |
743 | | - return Status.SUCCESS |
744 | | - |
745 | | - |
746 | | -class HomewbrewWorkflowInputs(ReleaseAction): |
747 | | - def __init__( |
748 | | - self, |
749 | | - name: str, |
750 | | - workflow: Workflow, |
751 | | - package_meta: HomebrewMeta, |
752 | | - release_meta: ReleaseMeta, |
753 | | - log_prefix: str = "", |
754 | | - ) -> None: |
755 | | - self.workflow = workflow |
756 | | - self.package_meta = package_meta |
757 | | - self.release_meta = release_meta |
758 | | - super().__init__(name=f"{name} - homebrew", log_prefix=log_prefix) |
759 | | - |
760 | | - def update(self) -> Status: |
761 | | - if self.package_meta.release_type is not None: |
762 | | - self.workflow.inputs["release_type"] = self.package_meta.release_type.value |
763 | | - if self.release_meta.tag is not None: |
764 | | - self.workflow.inputs["release_tag"] = self.release_meta.tag |
765 | | - if self.package_meta.homebrew_channel is not None: |
766 | | - self.workflow.inputs["channel"] = self.package_meta.homebrew_channel.value |
767 | | - return Status.SUCCESS |
768 | | - |
769 | | - |
770 | | -class DetectHombrewReleaseAndChannel(ReleaseAction): |
771 | | - def __init__( |
772 | | - self, |
773 | | - name: str, |
774 | | - package_meta: HomebrewMeta, |
775 | | - release_meta: ReleaseMeta, |
776 | | - log_prefix: str = "", |
777 | | - ) -> None: |
778 | | - self.package_meta = package_meta |
779 | | - self.release_meta = release_meta |
780 | | - self.release_version: Optional[RedisVersion] = None |
781 | | - super().__init__(name=name, log_prefix=log_prefix) |
782 | | - |
783 | | - def initialise(self) -> None: |
784 | | - if self.release_meta.tag is None: |
785 | | - self.logger.error("Release tag is not set") |
786 | | - return |
787 | | - if self.release_version is not None: |
788 | | - return |
789 | | - |
790 | | - self.feedback_message = "" |
791 | | - try: |
792 | | - self.release_version = RedisVersion.parse(self.release_meta.tag) |
793 | | - except ValueError as e: |
794 | | - self.logger.error(f"Failed to parse release tag: {e}") |
795 | | - return |
796 | | - |
797 | | - def update(self) -> Status: |
798 | | - if self.release_meta.tag is None: |
799 | | - logger.error("Release tag is not set") |
800 | | - return Status.FAILURE |
801 | | - |
802 | | - if ( |
803 | | - self.package_meta.homebrew_channel is not None |
804 | | - and self.package_meta.release_type is not None |
805 | | - ): |
806 | | - pass |
807 | | - else: |
808 | | - assert self.release_version is not None |
809 | | - if self.package_meta.release_type is None: |
810 | | - if self.release_version.is_internal: |
811 | | - self.package_meta.release_type = ReleaseType.INTERNAL |
812 | | - else: |
813 | | - if self.release_version.is_ga: |
814 | | - self.package_meta.release_type = ReleaseType.PUBLIC |
815 | | - elif self.release_version.is_rc: |
816 | | - self.package_meta.release_type = ReleaseType.PUBLIC |
817 | | - else: |
818 | | - self.package_meta.release_type = ReleaseType.INTERNAL |
819 | | - |
820 | | - if self.package_meta.homebrew_channel is None: |
821 | | - if self.release_version.is_ga: |
822 | | - self.package_meta.homebrew_channel = HomebrewChannel.STABLE |
823 | | - else: |
824 | | - # RC, internal, or any other version goes to RC channel |
825 | | - self.package_meta.homebrew_channel = HomebrewChannel.RC |
826 | | - self.feedback_message = f"release_type: {self.package_meta.release_type.value}, homebrew_channel: {self.package_meta.homebrew_channel.value}" |
827 | | - |
828 | | - if self.log_once( |
829 | | - "homebrew_channel_detected", self.package_meta.ephemeral.log_once_flags |
830 | | - ): |
831 | | - self.logger.info( |
832 | | - f"Hombrew release_type: {self.package_meta.release_type}, homebrew_channel: {self.package_meta.homebrew_channel}" |
833 | | - ) |
834 | | - |
835 | | - return Status.SUCCESS |
836 | | - |
837 | | - |
838 | | -class ClassifyHomebrewVersion(ReleaseAction): |
839 | | - """Classify Homebrew version by downloading and parsing the cask file. |
840 | | -
|
841 | | - This behavior downloads the appropriate Homebrew cask file (redis.rb or redis-rc.rb) |
842 | | - based on the homebrew_channel, extracts the version, and compares it with the |
843 | | - release tag version to determine if the version is acceptable. |
844 | | - """ |
845 | | - |
846 | | - def __init__( |
847 | | - self, |
848 | | - name: str, |
849 | | - package_meta: HomebrewMeta, |
850 | | - release_meta: ReleaseMeta, |
851 | | - github_client: GitHubClientAsync, |
852 | | - log_prefix: str = "", |
853 | | - ) -> None: |
854 | | - self.package_meta = package_meta |
855 | | - self.release_meta = release_meta |
856 | | - self.github_client = github_client |
857 | | - self.task: Optional[asyncio.Task] = None |
858 | | - self.release_version: Optional[RedisVersion] = None |
859 | | - self.cask_version: Optional[RedisVersion] = None |
860 | | - super().__init__(name=name, log_prefix=log_prefix) |
861 | | - |
862 | | - def initialise(self) -> None: |
863 | | - """Initialize by validating inputs and starting download task.""" |
864 | | - if self.package_meta.ephemeral.is_version_acceptable is not None: |
865 | | - return |
866 | | - |
867 | | - self.feedback_message = "" |
868 | | - # Validate homebrew_channel is set |
869 | | - if self.package_meta.homebrew_channel is None: |
870 | | - self.logger.error("Homebrew channel is not set") |
871 | | - return |
872 | | - |
873 | | - # Validate repo and ref are set |
874 | | - if not self.package_meta.repo: |
875 | | - self.logger.error("Package repository is not set") |
876 | | - return |
877 | | - |
878 | | - if not self.package_meta.ref: |
879 | | - self.logger.error("Package ref is not set") |
880 | | - return |
881 | | - |
882 | | - # Parse release version from tag |
883 | | - if self.release_meta.tag is None: |
884 | | - self.logger.error("Release tag is not set") |
885 | | - return |
886 | | - |
887 | | - if self.package_meta.release_type is None: |
888 | | - self.logger.error("Package release type is not set") |
889 | | - return |
890 | | - |
891 | | - try: |
892 | | - self.release_version = RedisVersion.parse(self.release_meta.tag) |
893 | | - self.logger.debug(f"Parsed release version: {self.release_version}") |
894 | | - except ValueError as e: |
895 | | - self.logger.error(f"Failed to parse release tag: {e}") |
896 | | - return |
897 | | - |
898 | | - # Determine which cask file to download based on channel |
899 | | - if self.package_meta.homebrew_channel == HomebrewChannel.STABLE: |
900 | | - cask_file = "Casks/redis.rb" |
901 | | - elif self.package_meta.homebrew_channel == HomebrewChannel.RC: |
902 | | - cask_file = "Casks/redis-rc.rb" |
903 | | - else: |
904 | | - self.logger.error( |
905 | | - f"Unknown homebrew channel: {self.package_meta.homebrew_channel}" |
906 | | - ) |
907 | | - return |
908 | | - |
909 | | - self.logger.debug( |
910 | | - f"Downloading cask file: {cask_file} from {self.package_meta.repo}@{self.package_meta.ref}" |
911 | | - ) |
912 | | - |
913 | | - # Start async task to download the cask file from package repo and ref |
914 | | - self.task = asyncio.create_task( |
915 | | - self.github_client.download_file( |
916 | | - self.package_meta.repo, cask_file, self.package_meta.ref |
917 | | - ) |
918 | | - ) |
919 | | - |
920 | | - def update(self) -> Status: |
921 | | - """Process downloaded cask file and classify version.""" |
922 | | - if self.package_meta.ephemeral.is_version_acceptable is not None: |
923 | | - return Status.SUCCESS |
924 | | - |
925 | | - try: |
926 | | - assert self.task is not None |
927 | | - |
928 | | - # Wait for download to complete |
929 | | - if not self.task.done(): |
930 | | - return Status.RUNNING |
931 | | - |
932 | | - # Get the downloaded content |
933 | | - cask_content = self.task.result() |
934 | | - if cask_content is None: |
935 | | - self.logger.error("Failed to download cask file") |
936 | | - return Status.FAILURE |
937 | | - |
938 | | - # Parse version from cask file |
939 | | - # Look for: version "X.Y.Z" |
940 | | - version_match = re.search( |
941 | | - r'^\s*version\s+"([^"]+)"', cask_content, re.MULTILINE |
942 | | - ) |
943 | | - if not version_match: |
944 | | - self.logger.error("Could not find version declaration in cask file") |
945 | | - return Status.FAILURE |
946 | | - |
947 | | - version_str = version_match.group(1) |
948 | | - self.logger.debug(f"Found version in cask file: {version_str}") |
949 | | - |
950 | | - # Parse the cask version |
951 | | - try: |
952 | | - self.cask_version = RedisVersion.parse(version_str) |
953 | | - self.logger.info( |
954 | | - f"Cask version: {self.cask_version}, Release version: {self.release_version}" |
955 | | - ) |
956 | | - except ValueError as e: |
957 | | - self.logger.error(f"Failed to parse cask version '{version_str}': {e}") |
958 | | - return Status.FAILURE |
959 | | - |
960 | | - # Compare versions: cask version >= release version means acceptable |
961 | | - assert self.release_version is not None |
962 | | - self.package_meta.remote_version = str(self.cask_version) |
963 | | - log_prepend = "" |
964 | | - prepend_color = "green" |
965 | | - if self.release_version >= self.cask_version: |
966 | | - self.package_meta.ephemeral.is_version_acceptable = True |
967 | | - self.feedback_message = ( |
968 | | - f"release {self.release_version} >= cask {self.cask_version}" |
969 | | - ) |
970 | | - log_prepend = "Version acceptable: " |
971 | | - else: |
972 | | - self.package_meta.ephemeral.is_version_acceptable = False |
973 | | - log_prepend = "Version NOT acceptable: " |
974 | | - prepend_color = "yellow" |
975 | | - self.feedback_message = ( |
976 | | - f"release {self.release_version} < cask {self.cask_version}" |
977 | | - ) |
978 | | - if self.log_once( |
979 | | - "homebrew_version_classified", |
980 | | - self.package_meta.ephemeral.log_once_flags, |
981 | | - ): |
982 | | - self.logger.info( |
983 | | - f"[{prepend_color}]{log_prepend}{self.feedback_message}[/]" |
984 | | - ) |
985 | | - return Status.SUCCESS |
986 | | - |
987 | | - except Exception as e: |
988 | | - return self.log_exception_and_return_failure(e) |
989 | | - |
990 | | - |
991 | 717 | ### Conditions ### |
992 | 718 |
|
993 | 719 |
|
@@ -1181,21 +907,3 @@ def update(self) -> Status: |
1181 | 907 | if self.package_meta.ephemeral.force_rebuild: |
1182 | 908 | return Status.SUCCESS |
1183 | 909 | return Status.FAILURE |
1184 | | - |
1185 | | - |
1186 | | -class NeedToReleaseHomebrew(LoggingAction): |
1187 | | - def __init__( |
1188 | | - self, |
1189 | | - name: str, |
1190 | | - package_meta: HomebrewMeta, |
1191 | | - release_meta: ReleaseMeta, |
1192 | | - log_prefix: str = "", |
1193 | | - ) -> None: |
1194 | | - self.package_meta = package_meta |
1195 | | - self.release_meta = release_meta |
1196 | | - super().__init__(name=name, log_prefix=log_prefix) |
1197 | | - |
1198 | | - def update(self) -> Status: |
1199 | | - if self.package_meta.ephemeral.is_version_acceptable is True: |
1200 | | - return Status.SUCCESS |
1201 | | - return Status.FAILURE |
0 commit comments