mobiusbyte/bumpit

View on GitHub
bumpit/core/bumpit.py

Summary

Maintainability
A
0 mins
Test Coverage
import os
from dataclasses import dataclass
from typing import Any

from bumpit.core.config import Configuration
from bumpit.core.folder import FolderManager
from bumpit.core.vcs import Git, GitSettings
from bumpit.core.versions import next_version
from bumpit.core.versions.strategy import StrategySettings


@dataclass
class RunSettings:
    dry_run: bool
    target_part: Any
    force_value: Any


def run(config, logger, run_settings):
    configuration = Configuration.parse(config)

    executor = BumpIt(configuration, run_settings.dry_run, logger)

    part = run_settings.target_part or configuration.strategy.part

    bumped_version = next_version(
        strategy_settings=StrategySettings(
            target_strategy=configuration.strategy.name,
            version_format=configuration.strategy.version_format,
            current_version=configuration.current_version,
        ),
        part=part,
        force_value=run_settings.force_value,
    )

    executor.execute(bumped_version)


class BumpIt:
    def __init__(self, configuration, dry_run, logger):
        self._folder_manager = FolderManager(
            folder=os.getcwd(), logger=logger, dry_run=dry_run
        )
        self._vcs = Git(
            dry_run=dry_run,
            settings=GitSettings(
                author=configuration.commit.author,
                apply_tag=configuration.tag.apply,
                tag_format=configuration.tag.format,
                auto_remote_push=configuration.auto_remote_push,
            ),
            logger=logger,
        )
        self._current_version = configuration.current_version
        self._tracked_files = configuration.tracked_files + [configuration.config_file]
        self._base_branch = configuration.base_branch

    def execute(self, bumped_version):
        self._folder_manager.update(
            current_version=self._current_version,
            bumped_version=bumped_version,
            files=self._tracked_files,
        )

        self._vcs.update(
            current_version=self._current_version,
            bumped_version=bumped_version,
            base_branch=self._base_branch,
        )