Skip to content

Commit

Permalink
✨ Add support for tagging releases
Browse files Browse the repository at this point in the history
  • Loading branch information
relekang committed Jul 27, 2015
1 parent 441798a commit 5f4736f
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 9 deletions.
3 changes: 2 additions & 1 deletion semantic_release/cli.py
@@ -1,6 +1,6 @@
import click
from semantic_release.git_helpers import commit_new_version

from semantic_release.git_helpers import commit_new_version, tag_new_version
from semantic_release.helpers import get_current_version, get_new_version, set_new_version
from semantic_release.history import evaluate_version_bump

Expand Down Expand Up @@ -47,6 +47,7 @@ def version(**kwargs):

set_new_version(new_version)
commit_new_version(new_version)
tag_new_version(new_version)
click.echo('Bumping with a {0} version to {1}.'.format(level_bump, new_version))


Expand Down
5 changes: 5 additions & 0 deletions semantic_release/git_helpers.py
@@ -1,5 +1,6 @@
from git import Repo
from invoke import run

from semantic_release.settings import load_config


Expand All @@ -13,3 +14,7 @@ def commit_new_version(version):
add = run('git add {}'.format(load_config().get('version_variable').split(':')[0]), hide=True)
if add.ok:
run('git commit -m "{}"'.format(version), hide=True)


def tag_new_version(version):
return run('git tag v{} HEAD'.format(version), hide=True)
1 change: 1 addition & 0 deletions semantic_release/helpers.py
Expand Up @@ -2,6 +2,7 @@

import semver
from invoke import run

from semantic_release.settings import load_config


Expand Down
2 changes: 0 additions & 2 deletions semantic_release/settings.py
Expand Up @@ -16,5 +16,3 @@ def load_config():
settings.update(DEFAULTS)
settings.update(config._sections['semantic_release'])
return settings


14 changes: 10 additions & 4 deletions tests/test_cli.py
Expand Up @@ -16,21 +16,23 @@ def test_main_should_call_correct_function(self, mock_version):
self.assertEqual(result.exit_code, 0)
mock_version.assert_called_once()

@mock.patch('semantic_release.cli.tag_new_version')
@mock.patch('semantic_release.cli.commit_new_version')
@mock.patch('semantic_release.cli.set_new_version')
@mock.patch('semantic_release.cli.get_new_version', return_value='2.0.0')
@mock.patch('semantic_release.cli.evaluate_version_bump', return_value='major')
@mock.patch('semantic_release.cli.get_current_version', return_value='1.2.3')
def test_version_should_call_correct_functions(self, mock_current_version, mock_evaluate_bump,
mock_new_version, mock_set_new_version,
mock_commit_new_version):
mock_commit_new_version, mock_tag_new_version):
result = self.runner.invoke(main, ['version'])
self.assertEqual(result.exit_code, 0)
mock_current_version.assert_called_once_with()
mock_evaluate_bump.assert_called_once_with('1.2.3', None)
mock_new_version.assert_called_once_with('1.2.3', 'major')
mock_set_new_version.assert_called_once_with('2.0.0')
mock_commit_new_version.assert_called_once_with('2.0.0')
mock_tag_new_version.assert_called_once_with('2.0.0')

@mock.patch('semantic_release.cli.version')
def test_force_major(self, mock_version):
Expand All @@ -53,27 +55,31 @@ def test_force_patch(self, mock_version):
mock_version.assert_called_once()
self.assertEqual(mock_version.call_args_list[0][1]['force_level'], 'patch')

@mock.patch('semantic_release.cli.tag_new_version')
@mock.patch('semantic_release.cli.evaluate_version_bump', lambda *x: 'major')
@mock.patch('semantic_release.cli.commit_new_version')
@mock.patch('semantic_release.cli.set_new_version')
def test_noop_mode(self, mock_set_new, mock_commit_new):
def test_noop_mode(self, mock_set_new, mock_commit_new, mock_tag_new_version):
result = self.runner.invoke(main, ['version', '--noop'])
self.assertEqual(result.exit_code, 0)
self.assertFalse(mock_set_new.called)
self.assertFalse(mock_commit_new.called)
self.assertFalse(mock_tag_new_version.called)

@mock.patch('semantic_release.cli.tag_new_version')
@mock.patch('semantic_release.cli.commit_new_version')
@mock.patch('semantic_release.cli.set_new_version')
@mock.patch('semantic_release.cli.get_new_version', return_value='1.2.3')
@mock.patch('semantic_release.cli.evaluate_version_bump', return_value=None)
@mock.patch('semantic_release.cli.get_current_version', return_value='1.2.3')
def test_version_no_change(self, mock_current_version, mock_evaluate_bump,
mock_new_version, mock_set_new_version,
mock_commit_new_version):
mock_new_version, mock_set_new_version,
mock_commit_new_version, mock_tag_new_version):
result = self.runner.invoke(main, ['version'])
self.assertEqual(result.exit_code, 0)
mock_current_version.assert_called_once_with()
mock_evaluate_bump.assert_called_once_with('1.2.3', None)
mock_new_version.assert_called_once_with('1.2.3', None)
self.assertFalse(mock_set_new_version.called)
self.assertFalse(mock_commit_new_version.called)
self.assertFalse(mock_tag_new_version.called)
4 changes: 3 additions & 1 deletion tests/test_git_helpers.py
@@ -1,6 +1,8 @@
from unittest import TestCase, mock

from invoke.runner import Result
from semantic_release.git_helpers import get_commit_log, commit_new_version

from semantic_release.git_helpers import commit_new_version, get_commit_log


class GetCommitLogTest(TestCase):
Expand Down
2 changes: 1 addition & 1 deletion tests/test_settings.py
@@ -1,4 +1,5 @@
from unittest import TestCase

from semantic_release.settings import load_config


Expand All @@ -10,4 +11,3 @@ def test_load_config(self):
self.assertIn('major_tag', config)
self.assertIn('minor_tag', config)
self.assertIn('patch_tag', config)

0 comments on commit 5f4736f

Please sign in to comment.