Skip to content

Commit

Permalink
[0.1.0] A: New Routine: tagging #minor
Browse files Browse the repository at this point in the history
  • Loading branch information
Luzkan authored and GitVersioniser committed Apr 28, 2022
1 parent 2bf02c3 commit f1b943c
Show file tree
Hide file tree
Showing 39 changed files with 386 additions and 56 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/GitVersioniser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ jobs:
# Main
# ----
routine_version: "last_gitversioniser_commit"
routine_contribution: "push_main_amend"
routine_commiting: "push_main_amend"
routine_tagging: "always"
routine_commit_message: "prefix_tag"

# ---------------------------
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ _Note: New changelog entries are going to be created after the first horizontal

---

## [[0.1.0]] - 2022-04-28

### Added
- New Routine: `tagging` #minor



## [[0.0.2+build.6]] - 2022-04-28

### Changed
Expand Down Expand Up @@ -111,3 +118,5 @@ _Note: New changelog entries are going to be created after the first horizontal

[0.0.2+build.6]: https://github.com/Luzkan/GitVersioniser/releases/tag/0.0.2+build.6

[0.1.0]: https://github.com/Luzkan/GitVersioniser/releases/tag/0.1.0

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<img src="./docs/img/logo.png" style="height: 128px; width; 128px;"/>
<h2 align="center">GitVersioniser</h2>
<div>
<p style="font-style: italic;">Automatic Semantic Versioniser & Change Tracker [0.0.2+build.6]</p>
<p style="font-style: italic;">Automatic Semantic Versioniser & Change Tracker [0.1.0]</p>
</div>
</div>

Expand Down
9 changes: 7 additions & 2 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,14 @@ inputs:
description: '(Routine) Routine which will the GitVersioniser follow when versionising your repository.'
required: false
default: 'last_gitversioniser_commit'
routine_contribution:
routine_commiting:
description: '(Routine) The way of contributing changes made by GitVersioniser to your repository.'
required: false
default: 'push_main_amend'
routine_tagging:
description: '(Routine) When should GitVersioniser tag your repository.'
required: false
default: 'always'
routine_commit_message:
description: '(Routine) Decides how the Commit Message made by GitVersioniser will be made.'
required: false
Expand Down Expand Up @@ -55,7 +59,8 @@ runs:
# ---------------------------
# (Routine) Main
- ${{ inputs.routine_version }}
- ${{ inputs.routine_contribution }}
- ${{ inputs.routine_commiting }}
- ${{ inputs.routine_tagging }}
- ${{ inputs.routine_commit_message }}
# ---------------------------
# (Routine) Changelog Handling
Expand Down
3 changes: 2 additions & 1 deletion docs/example/GitVersioniser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ jobs:
# Main
# ----
routine_version: "last_gitversioniser_commit"
routine_contribution: "push_main_amend"
routine_commiting: "push_main_amend"
routine_tagging: "always"
routine_commit_message: "prefix_tag"

# ---------------------------
Expand Down
13 changes: 7 additions & 6 deletions entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,18 @@
# Main
# ----
# $3 - [Routine] Version
# $4 - [Routine] Contribution
# $5 - [Routine] Commit Messages
# $4 - [Routine] Commiting
# $5 - [Routine] Tagging
# $6 - [Routine] Commit Messages
# ----
# Changelog
# ----
# $6 - [Routine] Changelog
# $7 - [Routine] Changelog
# ----
# File Updating
# ----
# $7 - [Routine] File Updater
# $8 - [Setting] File List
# $8 - [Routine] File Updater
# $9 - [Setting] File List

# -----------------
# Git Configuration
Expand All @@ -30,4 +31,4 @@ git config --global user.email "$2"
# -----------------
# Running the Script
cd target_repository
python /main.py -d . --routine_version $3 --routine_contribution $4 --routine_commit_message $5 --routine_file_updater $6 --routine_file_updater $7 --versioned_files $8
python /main.py -d . --routine_version $3 --routine_contribution $4 --routine_tagging $5 --routine_commit_message $5 --routine_file_updater $6 --routine_file_updater $7 --versioned_files $8
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from gitversioniser.domain.versioniser.versioniser import Versioniser


__version__ = '0.0.2+build.6'
__version__ = '0.1.0'


def config() -> Config:
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@


if __name__ == "__main__":
setup(version='0.0.2+build.6')
setup(version='0.1.0')
13 changes: 9 additions & 4 deletions src/gitversioniser/config/arguments.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Arguments:

@staticmethod
def get_arguments() -> 'Arguments':
parser = argparse.ArgumentParser(description="GitVersioniser [0.0.2+build.6]")
parser = argparse.ArgumentParser(description="GitVersioniser [0.1.0]")
parser.add_argument(
"-d", "--target_directory", default='.',
help="(Setting) Path to repository which shall be versionised. (default: %(default)s)"
Expand All @@ -34,13 +34,17 @@ def get_arguments() -> 'Arguments':
help="(Routine) Decides which files will be versionised. (default: %(default)s)"
)
parser.add_argument(
"-rc", "--routine_contribution", default='push_main_amend',
"-rc", "--routine_commiting", default='push_main_amend',
help="(Routine) The way of contributing the GitVersioniser changes to remote repository. (default: %(default)s)"
)
parser.add_argument(
"-rcl", "--routine_changelog", default='commit_pattern',
help="(Routine) The way GitVersioniser will handle changelog. (default: %(default)s)"
)
parser.add_argument(
"-rt", "--routine_tagging", default='always',
help="(Routine) When should GitVersioniser tag the repository. (default: %(default)s)"
)
parsed_arguments = parser.parse_args()
return Arguments(
target_directory=parsed_arguments.target_directory,
Expand All @@ -49,7 +53,8 @@ def get_arguments() -> 'Arguments':
version=parsed_arguments.routine_version,
commit_message=parsed_arguments.routine_commit_message,
file_updater=parsed_arguments.routine_file_updater,
contribution=parsed_arguments.routine_contribution,
changelog=parsed_arguments.routine_changelog
commiting=parsed_arguments.routine_commiting,
changelog=parsed_arguments.routine_changelog,
tagging=parsed_arguments.routine_tagging
),
)
4 changes: 3 additions & 1 deletion src/gitversioniser/config/routines.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
ROUTINE_COMMIT_MESSAGE_TYPE,
ROUTINE_CONTRIBUTION_TYPE,
ROUTINE_FILE_UPDATER_TYPE,
ROUTINE_TAGGING_TYPE,
ROUTINE_VERSION_TYPE,
)

Expand All @@ -13,6 +14,7 @@
class Routines:
version: ROUTINE_VERSION_TYPE
commit_message: ROUTINE_COMMIT_MESSAGE_TYPE
contribution: ROUTINE_CONTRIBUTION_TYPE
commiting: ROUTINE_CONTRIBUTION_TYPE
file_updater: ROUTINE_FILE_UPDATER_TYPE
changelog: ROUTINE_CHANGELOG_TYPE
tagging: ROUTINE_TAGGING_TYPE
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from dataclasses import dataclass

from gitversioniser.domain.repository.commit_utils.tag import TagUtils
from gitversioniser.helpers.regex.pattern_semver import regex_pattern_semver
from gitversioniser.helpers.regex_pattern import RegexPattern


@dataclass
class VersionTagUtils(TagUtils):
def exist(self) -> bool:
return bool(regex_pattern_semver(self.value.lower()))
return bool(RegexPattern.semver(self.value.lower()))
4 changes: 2 additions & 2 deletions src/gitversioniser/domain/repository/tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from git.repo import Repo
from semver import VersionInfo

from gitversioniser.helpers.regex.pattern_semver import regex_pattern_semver
from gitversioniser.helpers.regex_pattern import RegexPattern


@dataclass
Expand All @@ -28,6 +28,6 @@ def truncate_v_from_semver(tag_semver: str) -> str:
return tag_semver[1:] if tag_semver and tag_semver[1] == 'v' else tag_semver

for tag in self.get_sorted:
if regex_pattern_semver(truncate_v_from_semver(tag)):
if RegexPattern.semver(truncate_v_from_semver(tag)):
return VersionInfo.parse(tag)
return VersionInfo(0, 0, 0)
Empty file.
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,11 @@

@dataclass
class PushMainAmend(RoutineContribution):
"""
Adds the version by amending to the latest commit on main branch.
Works best with:
- Solo Projects
"""

def run(self, result: VersionisingResult):
self.target_repo.remote.raise_if_changes()
self.target_repo.files.add_all()
self.target_repo.commits.commit_amend(message=result.commit_message)
self.target_repo.remote.push_force()
self.target_repo.remote.create_tag(version=str(result.versions.new))
self.target_repo.remote.push_tags()

@staticmethod
def factory_name() -> str:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,10 @@

@dataclass
class PushMainNew(RoutineContribution):
"""
Adds the version in a new commit.
Works best with:
- Solo & Team Projects
"""

def run(self, result: VersionisingResult):
self.target_repo.files.add_all()
self.target_repo.commits.commit(message=result.commit_message)
self.target_repo.remote.push()
self.target_repo.remote.create_tag(version=str(result.versions.new))
self.target_repo.remote.push_tags()

@staticmethod
def factory_name() -> str:
Expand Down
Empty file.
16 changes: 12 additions & 4 deletions src/gitversioniser/domain/versioniser/routines/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
from gitversioniser.domain.versioniser.routines.contribution.factory import RoutineContributionFactory
from gitversioniser.domain.versioniser.routines.file_updater.abstract import RoutineFileUpdater
from gitversioniser.domain.versioniser.routines.file_updater.factory import RoutineFileUpdaterFactory
from gitversioniser.domain.versioniser.routines.tagging.abstract import RoutineTagging
from gitversioniser.domain.versioniser.routines.tagging.factory import RoutineTaggingFactory
from gitversioniser.domain.versioniser.routines.version.abstract import RoutineVersion
from gitversioniser.domain.versioniser.routines.version.factory import RoutineVersionFactory

Expand All @@ -24,18 +26,20 @@ class RoutineManager:
contribution: RoutineContribution = field(init=False)
file_updater: RoutineFileUpdater = field(init=False)
changelog: RoutineChangelog = field(init=False)
tagging: RoutineTagging = field(init=False)

def __post_init__(self):
def init_submodules():
self.version = RoutineVersionFactory.create(self.config.routines.version)(self.config, self.target_repo)
self.commit_message = RoutineCommitFactory.create(self.config.routines.commit_message)(self.config, self.target_repo)
self.contribution = RoutineContributionFactory.create(self.config.routines.contribution)(self.config, self.target_repo)
self.contribution = RoutineContributionFactory.create(self.config.routines.commiting)(self.config, self.target_repo)
self.file_updater = RoutineFileUpdaterFactory.create(self.config.routines.file_updater)(self.config, self.target_repo)
self.changelog = RoutineChangelogFactory.create(self.config.routines.changelog)(self.config, self.target_repo)
self.tagging = RoutineTaggingFactory.create(self.config.routines.tagging)(self.config, self.target_repo)

init_submodules()

def perform_versionising(self) -> VersionisingResult:
def versionise(self) -> VersionisingResult:
versions = self.version.run()
self.file_updater.run(versions)
self.changelog.run(versions.new)
Expand All @@ -44,6 +48,10 @@ def perform_versionising(self) -> VersionisingResult:
commit_message=self.commit_message.run(versions.new)
)

def run(self):
result: VersionisingResult = self.perform_versionising()
def contribute(self, result: VersionisingResult):
self.contribution.run(result)
self.tagging.run(result)

def run(self):
result: VersionisingResult = self.versionise()
self.contribute(result)
Empty file.
11 changes: 11 additions & 0 deletions src/gitversioniser/domain/versioniser/routines/tagging/abstract.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from abc import ABC, abstractmethod

from gitversioniser.domain.versioniser.helpers.routine_result import VersionisingResult
from gitversioniser.domain.versioniser.routines.abstract import Routine


class RoutineTagging(Routine, ABC):

@abstractmethod
def run(self, result: VersionisingResult):
pass
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from dataclasses import dataclass

from gitversioniser.domain.versioniser.helpers.routine_result import VersionisingResult
from gitversioniser.domain.versioniser.routines.tagging.abstract import RoutineTagging


@dataclass
class Always(RoutineTagging):
def run(self, result: VersionisingResult):
self.target_repo.remote.create_tag(version=str(result.versions.new))
self.target_repo.remote.push_tags()

@staticmethod
def factory_name() -> str:
return 'always'
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from dataclasses import dataclass

from gitversioniser.domain.versioniser.helpers.routine_result import VersionisingResult
from gitversioniser.domain.versioniser.routines.tagging.abstract import RoutineTagging


@dataclass
class TagIfPatchOrHigher(RoutineTagging):
def run(self, result: VersionisingResult):
if any([
result.versions.new.major > result.versions.old.major,
result.versions.new.minor > result.versions.old.minor,
result.versions.new.patch > result.versions.old.patch
]):
return self.tag(result)

def tag(self, result: VersionisingResult):
self.target_repo.remote.create_tag(version=str(result.versions.new))
self.target_repo.remote.push_tags()

@staticmethod
def factory_name() -> str:
return 'if_patch_or_higher'
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from dataclasses import dataclass

from gitversioniser.domain.versioniser.helpers.routine_result import VersionisingResult
from gitversioniser.domain.versioniser.routines.tagging.abstract import RoutineTagging
from gitversioniser.helpers.regex_pattern import RegexPattern


@dataclass
class TagIfPrereleaseOrHigher(RoutineTagging):
def run(self, result: VersionisingResult):
if any([
result.versions.new.major > result.versions.old.major,
result.versions.new.minor > result.versions.old.minor,
result.versions.new.patch > result.versions.old.patch,
self.prerelease_number(result.versions.new.prerelease) > self.prerelease_number(result.versions.old.prerelease),
]):
return self.tag(result)

def prerelease_number(self, prerelease: str | None) -> int:
if not prerelease:
return 0
match = RegexPattern.prerelease(prerelease)
return int(match.group(1)) if match else 0

def tag(self, result: VersionisingResult):
self.target_repo.remote.create_tag(version=str(result.versions.new))
self.target_repo.remote.push_tags()

@staticmethod
def factory_name() -> str:
return 'if_prerelease_or_higher'
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from dataclasses import dataclass

from gitversioniser.domain.versioniser.helpers.routine_result import VersionisingResult
from gitversioniser.domain.versioniser.routines.tagging.abstract import RoutineTagging


@dataclass
class Null(RoutineTagging):
def run(self, result: VersionisingResult):
""" This routine does nothing. """

@staticmethod
def factory_name() -> str:
return 'null'
Loading

0 comments on commit f1b943c

Please sign in to comment.