Skip to content

Commit

Permalink
feat(bump): disable bump commit
Browse files Browse the repository at this point in the history
  • Loading branch information
ABWassim authored and oknozor committed Mar 8, 2024
1 parent 3cd580e commit e6b5468
Show file tree
Hide file tree
Showing 7 changed files with 139 additions and 91 deletions.
8 changes: 8 additions & 0 deletions src/bin/cog/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,10 @@ enum Command {
/// Don't fail if there are untracked or uncommited files
#[arg(long = "skip-untracked")]
skip_untracked: bool,

/// Disable the creation of the bump commit
#[arg(long = "disable-bump-commit")]
disable_bump_commit: bool,
},

/// Install cog config files
Expand Down Expand Up @@ -385,6 +389,7 @@ fn main() -> Result<()> {
skip_ci,
skip_ci_override,
skip_untracked,
disable_bump_commit,
} => {
let mut cocogitto = CocoGitto::get()?;
let is_monorepo = !SETTINGS.packages.is_empty();
Expand Down Expand Up @@ -424,6 +429,7 @@ fn main() -> Result<()> {
skip_ci,
skip_ci_override,
skip_untracked,
disable_bump_commit,
};

cocogitto.create_package_version(opts)?
Expand All @@ -438,6 +444,7 @@ fn main() -> Result<()> {
skip_ci,
skip_ci_override,
skip_untracked,
disable_bump_commit,
};

cocogitto.create_monorepo_version(opts)?
Expand All @@ -453,6 +460,7 @@ fn main() -> Result<()> {
skip_ci,
skip_ci_override,
skip_untracked,
disable_bump_commit,
};
cocogitto.create_version(opts)?
}
Expand Down
2 changes: 2 additions & 0 deletions src/command/bump/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ pub struct BumpOptions<'a> {
pub skip_ci: bool,
pub skip_ci_override: Option<String>,
pub skip_untracked: bool,
pub disable_bump_commit: bool,
}

#[derive(Default)]
Expand All @@ -49,6 +50,7 @@ pub struct PackageBumpOptions<'a> {
pub skip_ci: bool,
pub skip_ci_override: Option<String>,
pub skip_untracked: bool,
pub disable_bump_commit: bool,
}

struct HookRunOptions<'a> {
Expand Down
122 changes: 70 additions & 52 deletions src/command/bump/monorepo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,26 +76,30 @@ impl CocoGitto {
let hook_result =
self.run_hooks(HookRunOptions::pre_bump().hook_profile(opts.hooks_config));

let disable_bump_commit = opts.disable_bump_commit || SETTINGS.disable_bump_commit;

self.repository.add_all()?;
self.unwrap_or_stash_and_exit(&Tag::default(), hook_result);
self.bump_packages(opts.pre_release, opts.hooks_config, &bumps)?;

let sign = self.repository.gpg_sign();

let mut skip_ci_pattern = String::new();

if opts.skip_ci || opts.skip_ci_override.is_some() {
skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
if !disable_bump_commit {
let sign = self.repository.gpg_sign();
if opts.skip_ci || opts.skip_ci_override.is_some() {
let skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
self.repository.commit(
&format!("chore(version): bump packages {}", skip_ci_pattern),
sign,
true,
)?;
} else {
self.repository
.commit("chore(version): bump packages", sign, true)?;
}
}

self.repository.commit(
&format!("chore(version): bump packages {}", skip_ci_pattern),
sign,
true,
)?;

for bump in &bumps {
self.repository.create_tag(&bump.new_version.prefixed_tag)?;
self.repository
.create_tag(&bump.new_version.prefixed_tag, disable_bump_commit)?;
}

// Run per package post hooks
Expand Down Expand Up @@ -221,40 +225,46 @@ impl CocoGitto {
);

self.repository.add_all()?;

self.unwrap_or_stash_and_exit(&tag, hook_result);

self.unwrap_or_stash_and_exit(&Tag::default(), hook_result);
self.bump_packages(opts.pre_release, opts.hooks_config, &bumps)?;

let sign = self.repository.gpg_sign();

let mut skip_ci_pattern = String::new();

if opts.skip_ci || opts.skip_ci_override.is_some() {
skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
let disable_bump_commit = opts.disable_bump_commit || SETTINGS.disable_bump_commit;

if !disable_bump_commit {
let sign = self.repository.gpg_sign();
if opts.skip_ci || opts.skip_ci_override.is_some() {
let skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
self.repository.commit(
&format!(
"chore(version): {} {}",
next_version.prefixed_tag, skip_ci_pattern
),
sign,
true,
)?;
} else {
self.repository.commit(
&format!("chore(version): {}", next_version.prefixed_tag),
sign,
true,
)?;
}
}

self.repository.commit(
&format!(
"chore(version): {} {}",
next_version.prefixed_tag, skip_ci_pattern
),
sign,
true,
)?;

for bump in &bumps {
self.repository.create_tag(&bump.new_version.prefixed_tag)?;
self.repository
.create_tag(&bump.new_version.prefixed_tag, disable_bump_commit)?;
}

if let Some(msg_tmpl) = opts.annotated {
let mut context = tera::Context::new();
context.insert("latest", &old.version.to_string());
context.insert("version", &tag.version.to_string());
let msg = Tera::one_off(&msg_tmpl, &context, false)?;
self.repository.create_annotated_tag(&tag, &msg)?;
self.repository
.create_annotated_tag(&tag, &msg, disable_bump_commit)?;
} else {
self.repository.create_tag(&tag)?;
self.repository.create_tag(&tag, disable_bump_commit)?;
}

// Run per package post hooks
Expand Down Expand Up @@ -353,33 +363,41 @@ impl CocoGitto {
);

self.repository.add_all()?;
self.unwrap_or_stash_and_exit(&tag, hook_result);

let sign = self.repository.gpg_sign();

let mut skip_ci_pattern = String::new();
self.unwrap_or_stash_and_exit(&Tag::default(), hook_result);

if opts.skip_ci || opts.skip_ci_override.is_some() {
skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
let disable_bump_commit = opts.disable_bump_commit || SETTINGS.disable_bump_commit;

if !disable_bump_commit {
let sign = self.repository.gpg_sign();

if opts.skip_ci || opts.skip_ci_override.is_some() {
let skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
self.repository.commit(
&format!(
"chore(version): {} {}",
next_version.prefixed_tag, skip_ci_pattern
),
sign,
true,
)?;
} else {
self.repository.commit(
&format!("chore(version): {}", next_version.prefixed_tag),
sign,
true,
)?;
}
}

self.repository.commit(
&format!(
"chore(version): {} {}",
next_version.prefixed_tag, skip_ci_pattern
),
sign,
true,
)?;

if let Some(msg_tmpl) = opts.annotated {
let mut context = tera::Context::new();
context.insert("latest", &old.version.to_string());
context.insert("version", &tag.version.to_string());
let msg = Tera::one_off(&msg_tmpl, &context, false)?;
self.repository.create_annotated_tag(&tag, &msg)?;
self.repository
.create_annotated_tag(&tag, &msg, disable_bump_commit)?;
} else {
self.repository.create_tag(&tag)?;
self.repository.create_tag(&tag, disable_bump_commit)?;
}

// Run global post hooks
Expand Down
37 changes: 21 additions & 16 deletions src/command/bump/package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,30 +81,35 @@ impl CocoGitto {
);

self.repository.add_all()?;
self.unwrap_or_stash_and_exit(&tag, hook_result);

let sign = self.repository.gpg_sign();

let mut skip_ci_pattern = String::new();

if opts.skip_ci || opts.skip_ci_override.is_some() {
skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
self.unwrap_or_stash_and_exit(&Tag::default(), hook_result);

let disable_bump_commit = opts.disable_bump_commit || SETTINGS.disable_bump_commit;

if !disable_bump_commit {
let sign = self.repository.gpg_sign();

if opts.skip_ci || opts.skip_ci_override.is_some() {
let skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
self.repository.commit(
&format!("chore(version): {tag} {}", skip_ci_pattern),
sign,
true,
)?;
} else {
self.repository
.commit(&format!("chore(version): {tag}"), sign, true)?;
}
}

self.repository.commit(
&format!("chore(version): {tag} {}", skip_ci_pattern),
sign,
true,
)?;

if let Some(msg_tmpl) = opts.annotated {
let mut context = tera::Context::new();
context.insert("latest", &current_tag.version.to_string());
context.insert("version", &tag.version.to_string());
let msg = Tera::one_off(&msg_tmpl, &context, false)?;
self.repository.create_annotated_tag(&tag, &msg)?;
self.repository
.create_annotated_tag(&tag, &msg, disable_bump_commit)?;
} else {
self.repository.create_tag(&tag)?;
self.repository.create_tag(&tag, disable_bump_commit)?;
}

self.run_hooks(
Expand Down
46 changes: 27 additions & 19 deletions src/command/bump/standard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,33 +66,41 @@ impl CocoGitto {
);

self.repository.add_all()?;
self.unwrap_or_stash_and_exit(&tag, hook_result);

let sign = self.repository.gpg_sign();

let mut skip_ci_pattern = String::new();

if opts.skip_ci || opts.skip_ci_override.is_some() {
skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
self.unwrap_or_stash_and_exit(&Tag::default(), hook_result);

let disable_bump_commit = opts.disable_bump_commit || SETTINGS.disable_bump_commit;

if !disable_bump_commit {
let sign = self.repository.gpg_sign();

if opts.skip_ci || opts.skip_ci_override.is_some() {
let skip_ci_pattern = opts.skip_ci_override.unwrap_or(SETTINGS.skip_ci.clone());
self.repository.commit(
&format!(
"chore(version): {} {}",
next_version.prefixed_tag, skip_ci_pattern
),
sign,
true,
)?;
} else {
self.repository.commit(
&format!("chore(version): {}", next_version.prefixed_tag),
sign,
true,
)?;
}
}

self.repository.commit(
&format!(
"chore(version): {} {}",
next_version.prefixed_tag, skip_ci_pattern
),
sign,
true,
)?;

if let Some(msg_tmpl) = opts.annotated {
let mut context = tera::Context::new();
context.insert("latest", &current_tag.version.to_string());
context.insert("version", &tag.version.to_string());
let msg = Tera::one_off(&msg_tmpl, &context, false)?;
self.repository.create_annotated_tag(&tag, &msg)?;
self.repository
.create_annotated_tag(&tag, &msg, disable_bump_commit)?;
} else {
self.repository.create_tag(&tag)?;
self.repository.create_tag(&tag, disable_bump_commit)?;
}

self.run_hooks(
Expand Down
13 changes: 9 additions & 4 deletions src/git/tag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ impl<'a> TagLookUpOptions<'a> {
}

impl Repository {
pub(crate) fn create_tag(&self, tag: &Tag) -> Result<(), Git2Error> {
if self.get_diff(true).is_some() {
pub(crate) fn create_tag(&self, tag: &Tag, disable_bump_commit: bool) -> Result<(), Git2Error> {
if !disable_bump_commit && self.get_diff(true).is_some() {
let statuses = self.get_statuses()?;
return Err(Git2Error::ChangesNeedToBeCommitted(statuses));
}
Expand All @@ -63,8 +63,13 @@ impl Repository {
.map_err(Git2Error::from)
}

pub(crate) fn create_annotated_tag(&self, tag: &Tag, msg: &str) -> Result<(), Git2Error> {
if self.get_diff(true).is_some() {
pub(crate) fn create_annotated_tag(
&self,
tag: &Tag,
msg: &str,
disable_bump_commit: bool,
) -> Result<(), Git2Error> {
if !disable_bump_commit && self.get_diff(true).is_some() {
let statuses = self.get_statuses()?;
return Err(Git2Error::ChangesNeedToBeCommitted(statuses));
}
Expand Down
2 changes: 2 additions & 0 deletions src/settings/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ pub struct Settings {
pub from_latest_tag: bool,
pub ignore_merge_commits: bool,
pub disable_changelog: bool,
pub disable_bump_commit: bool,
pub generate_mono_repository_global_tag: bool,
pub monorepo_version_separator: Option<String>,
pub branch_whitelist: Vec<String>,
Expand All @@ -55,6 +56,7 @@ impl Default for Settings {
from_latest_tag: false,
ignore_merge_commits: false,
disable_changelog: false,
disable_bump_commit: false,
generate_mono_repository_global_tag: true,
monorepo_version_separator: None,
branch_whitelist: vec![],
Expand Down

0 comments on commit e6b5468

Please sign in to comment.