Commit fae4640f authored by Adrian DC's avatar Adrian DC
Browse files

feat(gitlab): isolate GitLab project features enumeration

Signed-off-by: default avatarAdrian DC <radian.dc@gmail.com>
parent 7f025125
Loading
Loading
Loading
Loading
+49 −22
Changes for src/features/gitlab.py: 49 added lines, 22 removed lines.
Original line number Diff line number Diff line
@@ -15,6 +15,33 @@ class GitLabFeature:
    # Constants
    TIMEOUT_DELETION: int = 300

    # Enumerations, pylint: disable=too-few-public-methods
    class Features:

        # Constants
        ISSUES: str = 'Issues'
        MERGE_REQUESTS: str = 'Merge requests'
        FORKS: str = 'Forks'
        GIT_LFS: str = 'Git LFS'
        CI_CD: str = 'CI/CD'
        REPOSITORY: str = 'Repository'
        CONTAINER_REGISTRY: str = 'Container registry'
        ANALYTICS: str = 'Analytics'
        SECURITY_AND_COMPLIANCE: str = 'Security and Compliance'
        WIKI: str = 'Wiki'
        SNIPPETS: str = 'Snippets'
        PACKAGE_REGISTRY: str = 'Package registry'
        MODEL_EXPERIMENTS: str = 'Model experiments'
        MODEL_REGISTRY: str = 'Model registry'
        PAGES: str = 'Pages'
        MONITOR: str = 'Monitor'
        ENVIRONMENTS: str = 'Environments'
        FEATURE_FLAGS: str = 'Feature flags'
        INFRASTRUCTURE: str = 'Infrastructure'
        RELEASES: str = 'Releases'
        SERVICE_DESK: str = 'Service Desk'
        AUTO_DEVOPS: str = 'Auto DevOps'

    # Members
    __dry_run: bool = False
    __gitlab: Gitlab
@@ -237,7 +264,7 @@ class GitLabFeature:
        # Disable unused feature (Issues)
        if project.issues_enabled and not project.issues.list(get_all=False):
            project.issues_enabled = False
            result += ['Issues']
            result += [GitLabFeature.Features.ISSUES]

        # Disable unused feature (Repository)
        try:
@@ -245,7 +272,7 @@ class GitLabFeature:
        except (AssertionError, GitlabListError):
            if project.repository_access_level != 'disabled':
                project.repository_access_level = 'disabled'
                result += ['Repository']
                result += [GitLabFeature.Features.REPOSITORY]

        # Disable unused feature (Merge requests)
        try:
@@ -258,18 +285,18 @@ class GitLabFeature:
        except (AssertionError, GitlabListError):
            if project.merge_requests_enabled:
                project.merge_requests_enabled = False
                result += ['Merge requests']
                result += [GitLabFeature.Features.MERGE_REQUESTS]

        # Disable unused feature (Forks)
        if project.forking_access_level != 'disabled' and not project.forks.list(
                get_all=False):
            project.forking_access_level = 'disabled'
            result += ['Forks']
            result += [GitLabFeature.Features.FORKS]

        # Disable unused feature (Git LFS)
        if project.lfs_enabled and project.statistics['lfs_objects_size'] == 0:
            project.lfs_enabled = False
            result += ['Git LFS']
            result += [GitLabFeature.Features.GIT_LFS]

        # Disable unused feature (CI/CD)
        try:
@@ -290,58 +317,58 @@ class GitLabFeature:
        except (AssertionError, GitlabGetError, GitlabListError):
            if project.jobs_enabled:
                project.jobs_enabled = False
                result += ['CI/CD']
                result += [GitLabFeature.Features.CI_CD]

        # Disable unused feature (Container registry)
        if project.container_registry_enabled and not project.repositories.list(
                get_all=False):
            project.container_registry_enabled = False
            result += ['Container registry']
            result += [GitLabFeature.Features.CONTAINER_REGISTRY]

        # Disable unused feature (Analytics)
        if project.analytics_access_level != 'disabled':
            project.analytics_access_level = 'disabled'
            result += ['Analytics']
            result += [GitLabFeature.Features.ANALYTICS]

        # Disable unused feature (Security and Compliance)
        if project.security_and_compliance_access_level != 'disabled':
            project.security_and_compliance_access_level = 'disabled'
            result += ['Security and Compliance']
            result += [GitLabFeature.Features.SECURITY_AND_COMPLIANCE]

        # Disable unused feature (Wiki)
        if project.wiki_enabled and not project.wikis.list(get_all=False):
            project.wiki_enabled = False
            result += ['Wiki']
            result += [GitLabFeature.Features.WIKI]

        # Disable unused feature (Snippets)
        if project.snippets_enabled and not project.snippets.list(get_all=False):
            project.snippets_enabled = False
            result += ['Snippets']
            result += [GitLabFeature.Features.SNIPPETS]

        # Disable unused feature (Package registry)
        if project.packages_enabled and not project.packages.list(get_all=False):
            project.packages_enabled = False
            result += ['Package registry']
            result += [GitLabFeature.Features.PACKAGE_REGISTRY]

        # Disable unused feature (Model experiments)
        if project.model_experiments_access_level != 'disabled':
            project.model_experiments_access_level = 'disabled'
            result += ['Model experiments']
            result += [GitLabFeature.Features.MODEL_EXPERIMENTS]

        # Disable unused feature (Model registry)
        if project.model_registry_access_level != 'disabled':
            project.model_registry_access_level = 'disabled'
            result += ['Model registry']
            result += [GitLabFeature.Features.MODEL_REGISTRY]

        # Disable unused feature (Pages)
        if project.pages_access_level != 'disabled':
            project.pages_access_level = 'disabled'
            result += ['Pages']
            result += [GitLabFeature.Features.PAGES]

        # Disable unused feature (Monitor)
        if project.monitor_access_level != 'disabled':
            project.monitor_access_level = 'disabled'
            result += ['Monitor']
            result += [GitLabFeature.Features.MONITOR]

        # Disable unused feature (Environments)
        try:
@@ -349,33 +376,33 @@ class GitLabFeature:
        except (AssertionError, GitlabListError):
            if project.environments_access_level != 'disabled':
                project.environments_access_level = 'disabled'
                result += ['Environments']
                result += [GitLabFeature.Features.ENVIRONMENTS]

        # Disable unused feature (Feature flags)
        if project.feature_flags_access_level != 'disabled':
            project.feature_flags_access_level = 'disabled'
            result += ['Feature flags']
            result += [GitLabFeature.Features.FEATURE_FLAGS]

        # Disable unused feature (Infrastructure)
        if project.infrastructure_access_level != 'disabled':
            project.infrastructure_access_level = 'disabled'
            result += ['Infrastructure']
            result += [GitLabFeature.Features.INFRASTRUCTURE]

        # Disable unused feature (Releases)
        if project.releases_access_level != 'disabled' and not project.releases.list(
                get_all=False):
            project.releases_access_level = 'disabled'
            result += ['Releases']
            result += [GitLabFeature.Features.RELEASES]

        # Disable unused feature (Service Desk)
        if project.service_desk_enabled:
            project.service_desk_enabled = False
            result += ['Service Desk']
            result += [GitLabFeature.Features.SERVICE_DESK]

        # Disable unused feature (Auto DevOps)
        if project.auto_devops_enabled:
            project.auto_devops_enabled = False
            result += ['Auto DevOps']
            result += [GitLabFeature.Features.AUTO_DEVOPS]

        # Save project
        if not self.__dry_run: