Skip to content
This repository has been archived by the owner on Nov 13, 2021. It is now read-only.

feat: Add support for major zero-style initial development #138

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 7 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ license = "MIT"
term = "0.2"
toml = "0.1"
regex = "0.1"
semver = "0.2.1"
semver = "0.9.0"
rustc-serialize = "0.3.16"
git2 = "0.7.5"
clog = "0.9.1"
Expand Down
38 changes: 33 additions & 5 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,16 +79,44 @@ fn string_to_bool(answer: &str) -> bool {

fn version_bump(version: &Version, bump: CommitType) -> Option<Version> {
let mut version = version.clone();
match bump {
CommitType::Unknown => return None,
CommitType::Patch => version.increment_patch(),
CommitType::Minor => version.increment_minor(),
CommitType::Major => version.increment_major(),

// NB: According to the Semver spec, major version zero is for
// the initial development phase is treated slightly differently.
// The minor version is incremented for breaking changes
// and major is kept at zero until the public API has become more stable.
if version.major == 0 {
match bump {
CommitType::Unknown => return None,
CommitType::Patch => version.increment_patch(),
CommitType::Minor => version.increment_patch(),
CommitType::Major => version.increment_minor(),
}
} else {
match bump {
CommitType::Unknown => return None,
CommitType::Patch => version.increment_patch(),
CommitType::Minor => version.increment_minor(),
CommitType::Major => version.increment_major(),
}
}

Some(version)
}

#[test]
fn test_breaking_bump_major_zero() {
let buggy_release = Version::parse("0.2.0").unwrap();
let bumped_version = version_bump(&buggy_release, CommitType::Major).unwrap();
assert_eq!(bumped_version, Version::parse("0.3.0").unwrap());
}

#[test]
fn test_breaking_bump_major_one() {
let buggy_release = Version::parse("1.0.0").unwrap();
let bumped_version = version_bump(&buggy_release, CommitType::Major).unwrap();
assert_eq!(bumped_version, Version::parse("2.0.0").unwrap());
}

fn ci_env_set() -> bool {
env::var("CI").is_ok()
}
Expand Down
20 changes: 1 addition & 19 deletions tests/integration/fixtures/initial-release/_git/COMMIT_EDITMSG
Original file line number Diff line number Diff line change
@@ -1,19 +1 @@
Initial commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Mon Dec 28 18:58:01 2015 +0100
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: .gitignore
# new file: Cargo.toml
# new file: src/lib.rs
#
# Untracked files:
# _Cargo.toml
#
chore: Start at version 0.0.0 so initial release becomes 0.1.0
2 changes: 1 addition & 1 deletion tests/integration/fixtures/initial-release/_git/ORIG_HEAD
Original file line number Diff line number Diff line change
@@ -1 +1 @@
10fd867fb5cfc98335bbc17d45a562695ca3d456
99b6a63cde37b4aa4fc2c8b0f6929bec1bdea8e9
Binary file modified tests/integration/fixtures/initial-release/_git/index
Binary file not shown.
4 changes: 4 additions & 0 deletions tests/integration/fixtures/initial-release/_git/logs/HEAD
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@
10fd867fb5cfc98335bbc17d45a562695ca3d456 9be25420c4b6efd46024fe781111ab0bfdafa703 Jan-Erik Rediger <janerik@fnordig.de> 1456269321 +0100 commit (amend): Initial commit
9be25420c4b6efd46024fe781111ab0bfdafa703 d10b6057b5f6aa60e5a5f96d62b573a4b5f62b93 Jan-Erik Rediger <janerik@fnordig.de> 1456269588 +0100 commit (amend): Initial commit
d10b6057b5f6aa60e5a5f96d62b573a4b5f62b93 020521852d041fe00e67529a548ce153b4d637c7 Jan-Erik Rediger <janerik@fnordig.de> 1456269607 +0100 commit (amend): Initial commit
020521852d041fe00e67529a548ce153b4d637c7 020521852d041fe00e67529a548ce153b4d637c7 Sebastian Mandrean <sebastian.mandrean@gmail.com> 1557411633 +0200 reset: moving to master
020521852d041fe00e67529a548ce153b4d637c7 99b6a63cde37b4aa4fc2c8b0f6929bec1bdea8e9 Sebastian Mandrean <sebastian.mandrean@gmail.com> 1557411812 +0200 commit: Bump version to 1.0.0
99b6a63cde37b4aa4fc2c8b0f6929bec1bdea8e9 020521852d041fe00e67529a548ce153b4d637c7 Sebastian Mandrean <sebastian.mandrean@gmail.com> 1557411869 +0200 reset: moving to HEAD~1
020521852d041fe00e67529a548ce153b4d637c7 202003ba4446fb6b5d46698eada64c54b99161f0 Sebastian Mandrean <sebastian.mandrean@gmail.com> 1557412174 +0200 commit: chore: Start at version 0.0.0 so initial release becomes 0.1.0
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@
10fd867fb5cfc98335bbc17d45a562695ca3d456 9be25420c4b6efd46024fe781111ab0bfdafa703 Jan-Erik Rediger <janerik@fnordig.de> 1456269321 +0100 commit (amend): Initial commit
9be25420c4b6efd46024fe781111ab0bfdafa703 d10b6057b5f6aa60e5a5f96d62b573a4b5f62b93 Jan-Erik Rediger <janerik@fnordig.de> 1456269588 +0100 commit (amend): Initial commit
d10b6057b5f6aa60e5a5f96d62b573a4b5f62b93 020521852d041fe00e67529a548ce153b4d637c7 Jan-Erik Rediger <janerik@fnordig.de> 1456269607 +0100 commit (amend): Initial commit
020521852d041fe00e67529a548ce153b4d637c7 99b6a63cde37b4aa4fc2c8b0f6929bec1bdea8e9 Sebastian Mandrean <sebastian.mandrean@gmail.com> 1557411812 +0200 commit: Bump version to 1.0.0
99b6a63cde37b4aa4fc2c8b0f6929bec1bdea8e9 020521852d041fe00e67529a548ce153b4d637c7 Sebastian Mandrean <sebastian.mandrean@gmail.com> 1557411869 +0200 reset: moving to HEAD~1
020521852d041fe00e67529a548ce153b4d637c7 202003ba4446fb6b5d46698eada64c54b99161f0 Sebastian Mandrean <sebastian.mandrean@gmail.com> 1557412174 +0200 commit: chore: Start at version 0.0.0 so initial release becomes 0.1.0
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
x�;� @�=��`e�I�C�������������/�ؠN�-��L1 �4��R;��[g�&�\��B}���
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
x�1� P瞂�cܜ< a(�c�R%�_�_�[4��������+�a���̒�P7��҃��ɟ���D>�C2$h����
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
x5�M
�0@a�9�@7�4̤�/��̤c��V� x{+���-��=P��Ix/5�E�h�d.���V�^{�EI�ܪ7��RS�C2i5�d��/{���Kx�+�ݬk����q{�>��r���$j���1Y���wH>�*G0� �=4n
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
020521852d041fe00e67529a548ce153b4d637c7
202003ba4446fb6b5d46698eada64c54b99161f0
6 changes: 3 additions & 3 deletions tests/integration/integration.bats
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ setup_dirs() {
[ "$status" -eq 1 ]
}

@test "Initializes to v1.0.0" {
@test "Initializes to v0.1.0" {
cd initial-release
setup_dirs

semantic-rs --write=yes --release=no
grep -q 'version = "1.0.0"' Cargo.toml
grep -q 'version = "0.1.0"' Cargo.toml
}

@test "Bumps to next minor" {
Expand Down Expand Up @@ -115,7 +115,7 @@ setup_dirs() {
setup_dirs

CI=true semantic-rs --release=no
grep -q 'version = "1.0.0"' Cargo.toml
grep -q 'version = "0.2.0"' Cargo.toml
}

@test "Runs in dry-run-mode with CI=true but dry-run forced" {
Expand Down