Commit 5c90151d authored by Adrian DC's avatar Adrian DC
Browse files

feat(main, gitlab): implement '--available-features' for user help

Signed-off-by: default avatarAdrian DC <radian.dc@gmail.com>
parent 3df67d75
Loading
Loading
Loading
Loading
+3 −2
Changes for README.md: 3 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -29,8 +29,8 @@ The following step is required before using the tool:

```yaml
usage: gitlab-projects-settings [-h] [--version] [-t TOKEN] [--dry-run] [--exclude-group] [--exclude-subgroups]
                                [--exclude-projects] [--reset-features [KEEP_FEATURES]] [--reset-members]
                                [--set-avatar FILE] [--set-description TEXT] [--update-description]
                                [--exclude-projects] [--available-features] [--reset-features [KEEP_FEATURES]]
                                [--reset-members] [--set-avatar FILE] [--set-description TEXT] [--update-description]
                                [--run-housekeeping] [--archive-project | --unarchive-project] [--delete-group]
                                [--delete-project] [--protect-branches] [--protect-tags LEVEL]
                                [gitlab] [path]
@@ -51,6 +51,7 @@ common settings arguments:
  --exclude-projects                # Exclude children projects settings

general settings arguments:
  --available-features              # List the available GitLab project features known by the tool
  --reset-features [KEEP_FEATURES]  # Reset features of GitLab projects based on usage
                                    # (Optionally keep features separated by ",")
  --reset-members                   # Reset members of GitLab projects and groups
+10 −0
Changes for src/cli/entrypoint.py: 10 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -78,6 +78,16 @@ class Entrypoint:
                print(' ')
                Platform.flush()

        # Handle available features
        if options.available_features:
            print(f'{Colors.BOLD} - GitLab project:'
                  f'{Colors.RESET}')
            print(f'{Colors.BOLD}   - Available features: '
                  f'{Colors.CYAN}{", ".join(GitLabFeature.project_features_available())}'
                  f'{Colors.RESET}')
            Platform.flush()
            return Entrypoint.Result.FINALIZE

        # Handle single project
        if project:
            Entrypoint.project(
+6 −0
Changes for src/cli/main.py: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -91,6 +91,12 @@ def main() -> None:

    # Arguments general settings definitions
    group = parser.add_argument_group('general settings arguments')
    group.add_argument(
        '--available-features',
        dest='available_features',
        action='store_true',
        help='List the available GitLab project features known by the tool',
    )
    group.add_argument(
        '--reset-features',
        dest='reset_features',
+28 −0
Changes for src/features/gitlab.py: 28 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -193,6 +193,34 @@ class GitLabFeature:
        # Result
        return result

    # Project available features
    @staticmethod
    def project_features_available() -> List[str]:
        return [
            GitLabFeature.Features.ISSUES,
            GitLabFeature.Features.MERGE_REQUESTS,
            GitLabFeature.Features.FORKS,
            GitLabFeature.Features.GIT_LFS,
            GitLabFeature.Features.CI_CD,
            GitLabFeature.Features.REPOSITORY,
            GitLabFeature.Features.CONTAINER_REGISTRY,
            GitLabFeature.Features.ANALYTICS,
            GitLabFeature.Features.SECURITY_AND_COMPLIANCE,
            GitLabFeature.Features.WIKI,
            GitLabFeature.Features.SNIPPETS,
            GitLabFeature.Features.PACKAGE_REGISTRY,
            GitLabFeature.Features.MODEL_EXPERIMENTS,
            GitLabFeature.Features.MODEL_REGISTRY,
            GitLabFeature.Features.PAGES,
            GitLabFeature.Features.MONITOR,
            GitLabFeature.Features.ENVIRONMENTS,
            GitLabFeature.Features.FEATURE_FLAGS,
            GitLabFeature.Features.INFRASTRUCTURE,
            GitLabFeature.Features.RELEASES,
            GitLabFeature.Features.SERVICE_DESK,
            GitLabFeature.Features.AUTO_DEVOPS,
        ]

    # Project parse features
    @staticmethod
    def project_features_parse(input_string: str) -> List[str]: