diff --git a/Cargo.lock b/Cargo.lock index 362fea2e..3022419c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,11 +105,11 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "bindgen" -version = "0.72.0" +version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "cexpr", "clang-sys", "itertools 0.13.0", @@ -131,9 +131,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "bstr" @@ -169,12 +169,11 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.34" +version = "1.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" +checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" dependencies = [ - "jobserver", - "libc", + "find-msvc-tools", "shlex", ] @@ -224,9 +223,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.46" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" +checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" dependencies = [ "clap_builder", "clap_derive", @@ -234,9 +233,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.46" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" +checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" dependencies = [ "anstream", "anstyle", @@ -265,9 +264,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck", "proc-macro2", @@ -624,6 +623,12 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" + [[package]] name = "foldhash" version = "0.1.5" @@ -701,21 +706,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "git2" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" -dependencies = [ - "bitflags 2.9.3", - "libc", - "libgit2-sys", - "log", - "openssl-probe", - "openssl-sys", - "url", -] - [[package]] name = "glob" version = "0.3.3" @@ -892,7 +882,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "inotify-sys", "libc", ] @@ -958,16 +948,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.3", - "libc", -] - [[package]] name = "js-sys" version = "0.3.77" @@ -1010,20 +990,6 @@ version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" -[[package]] -name = "libgit2-sys" -version = "0.18.2+1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c42fe03df2bd3c53a3a9c7317ad91d80c81cd1fb0caec8d7cc4cd2bfa10c222" -dependencies = [ - "cc", - "libc", - "libssh2-sys", - "libz-sys", - "openssl-sys", - "pkg-config", -] - [[package]] name = "libloading" version = "0.8.8" @@ -1046,37 +1012,11 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "libc", "redox_syscall", ] -[[package]] -name = "libssh2-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -1118,11 +1058,11 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memfd" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" dependencies = [ - "rustix 0.38.44", + "rustix 1.0.8", ] [[package]] @@ -1155,7 +1095,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", @@ -1177,7 +1117,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "fsevent-sys", "inotify", "kqueue", @@ -1229,7 +1169,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "objc2", ] @@ -1257,24 +1197,6 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "path-slash" version = "0.2.1" @@ -1293,12 +1215,6 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - [[package]] name = "postcard" version = "1.1.3" @@ -1429,7 +1345,7 @@ version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", ] [[package]] @@ -1496,7 +1412,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -1509,7 +1425,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.9.4", @@ -1993,12 +1909,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "walkdir" version = "2.5.0" @@ -2097,7 +2007,7 @@ version = "0.229.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc3b1f053f5d41aa55640a1fa9b6d1b8a9e4418d118ce308d20e24ff3575a8c" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.9.4", "hashbrown", "indexmap", "semver", @@ -2123,7 +2033,7 @@ checksum = "57373e1d8699662fb791270ac5dfac9da5c14f618ecf940cdb29dc3ad9472a3c" dependencies = [ "addr2line", "anyhow", - "bitflags 2.9.3", + "bitflags 2.9.4", "bumpalo", "cc", "cfg-if", @@ -2617,7 +2527,6 @@ dependencies = [ "bindgen", "cc", "clap", - "git2", "indoc", "notify", "notify-debouncer-full", diff --git a/Cargo.toml b/Cargo.toml index 10f31590..99827f09 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -123,7 +123,6 @@ dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } etcetera = "0.10.0" filetime = "0.2.26" fs4 = "0.12.0" -git2 = "0.20.2" glob = "0.3.3" heck = "0.5.0" html-escape = "0.2.13" diff --git a/crates/xtask/Cargo.toml b/crates/xtask/Cargo.toml index 176a318d..b5d1bf6a 100644 --- a/crates/xtask/Cargo.toml +++ b/crates/xtask/Cargo.toml @@ -20,7 +20,6 @@ anyhow.workspace = true bindgen = { version = "0.72.0" } cc.workspace = true clap.workspace = true -git2.workspace = true indoc.workspace = true regex.workspace = true semver.workspace = true diff --git a/crates/xtask/src/bump.rs b/crates/xtask/src/bump.rs index 3efffaa1..0adfd1b6 100644 --- a/crates/xtask/src/bump.rs +++ b/crates/xtask/src/bump.rs @@ -1,18 +1,25 @@ -use std::cmp::Ordering; +use std::{cmp::Ordering, path::Path}; -use anyhow::{anyhow, Result}; -use git2::{DiffOptions, Repository}; +use anyhow::{anyhow, Context, Result}; use indoc::indoc; use semver::{BuildMetadata, Prerelease, Version}; use crate::{create_commit, BumpVersion}; -pub fn get_latest_tag(repo: &Repository) -> Result { - let mut tags = repo - .tag_names(None)? - .into_iter() - .filter_map(|tag| tag.map(String::from)) - .filter_map(|tag| Version::parse(tag.strip_prefix('v').unwrap_or(&tag)).ok()) +pub fn get_latest_tag() -> Result { + let output = std::process::Command::new("git") + .args(["tag", "-l"]) + .output()?; + if !output.status.success() { + anyhow::bail!( + "Failed to list tags: {}", + String::from_utf8_lossy(&output.stderr) + ); + } + + let mut tags = String::from_utf8(output.stdout)? + .lines() + .filter_map(|tag| Version::parse(tag.strip_prefix('v').unwrap_or(tag)).ok()) .collect::>(); tags.sort_by( @@ -29,10 +36,19 @@ pub fn get_latest_tag(repo: &Repository) -> Result { } pub fn run(args: BumpVersion) -> Result<()> { - let repo = Repository::open(".")?; - let latest_tag = get_latest_tag(&repo)?; + let latest_tag = get_latest_tag()?; let current_version = Version::parse(&latest_tag)?; - let latest_tag_sha = repo.revparse_single(&format!("v{latest_tag}"))?.id(); + + let output = std::process::Command::new("git") + .args(["rev-parse", &format!("v{latest_tag}")]) + .output()?; + if !output.status.success() { + anyhow::bail!( + "Failed to get tag SHA: {}", + String::from_utf8_lossy(&output.stderr) + ); + } + let latest_tag_sha = String::from_utf8(output.stdout)?.trim().to_string(); let workspace_toml_version = Version::parse(&fetch_workspace_version()?)?; @@ -49,43 +65,57 @@ pub fn run(args: BumpVersion) -> Result<()> { return Ok(()); } - let mut revwalk = repo.revwalk()?; - revwalk.push_range(format!("{latest_tag_sha}..HEAD").as_str())?; - let mut diff_options = DiffOptions::new(); + let output = std::process::Command::new("git") + .args(["rev-list", &format!("{latest_tag_sha}..HEAD")]) + .output()?; + if !output.status.success() { + anyhow::bail!( + "Failed to get commits: {}", + String::from_utf8_lossy(&output.stderr) + ); + } + let commits = String::from_utf8(output.stdout)? + .lines() + .map(|s| s.to_string()) + .collect::>(); let mut should_increment_patch = false; let mut should_increment_minor = false; - for oid in revwalk { - let oid = oid?; - let commit = repo.find_commit(oid)?; - let message = commit.message().unwrap(); - let message = message.trim(); + for commit_sha in commits { + let output = std::process::Command::new("git") + .args(["log", "-1", "--format=%s", &commit_sha]) + .output()?; + if !output.status.success() { + continue; + } + let message = String::from_utf8(output.stdout)?.trim().to_string(); - let diff = { - let parent = commit.parent(0).unwrap(); - let parent_tree = parent.tree().unwrap(); - let commit_tree = commit.tree().unwrap(); - repo.diff_tree_to_tree( - Some(&parent_tree), - Some(&commit_tree), - Some(&mut diff_options), - )? - }; + let output = std::process::Command::new("git") + .args([ + "diff-tree", + "--no-commit-id", + "--name-only", + "-r", + &commit_sha, + ]) + .output()?; + if !output.status.success() { + continue; + } let mut source_code_changed = false; - diff.foreach( - &mut |delta, _| { - let path = delta.new_file().path().unwrap().to_str().unwrap(); - if path.ends_with("rs") || path.ends_with("js") || path.ends_with('c') { - source_code_changed = true; - } - true - }, - None, - None, - None, - )?; + for path in String::from_utf8(output.stdout)?.lines() { + let path = Path::new(path); + if path.extension().is_some_and(|ext| { + ext.eq_ignore_ascii_case("rs") + || ext.eq_ignore_ascii_case("js") + || ext.eq_ignore_ascii_case("c") + }) { + source_code_changed = true; + break; + } + } if source_code_changed { should_increment_patch = true; @@ -138,16 +168,13 @@ pub fn run(args: BumpVersion) -> Result<()> { update_cmake(&next_version)?; update_npm(&next_version)?; update_zig(&next_version)?; - tag_next_version(&repo, &next_version)?; + tag_next_version(&next_version)?; Ok(()) } -fn tag_next_version(repo: &Repository, next_version: &Version) -> Result<()> { - let signature = repo.signature()?; - - let commit_id = create_commit( - repo, +fn tag_next_version(next_version: &Version) -> Result<()> { + let commit_sha = create_commit( &format!("{next_version}"), &[ "Cargo.lock", @@ -166,15 +193,25 @@ fn tag_next_version(repo: &Repository, next_version: &Version) -> Result<()> { ], )?; - let tag = repo.tag( - &format!("v{next_version}"), - &repo.find_object(commit_id, None)?, - &signature, - &format!("v{next_version}"), - false, - )?; + // Create tag + let output = std::process::Command::new("git") + .args([ + "tag", + "-a", + &format!("v{next_version}"), + "-m", + &format!("v{next_version}"), + &commit_sha, + ]) + .output()?; + if !output.status.success() { + anyhow::bail!( + "Failed to create tag: {}", + String::from_utf8_lossy(&output.stderr) + ); + } - println!("Tagged commit {commit_id} with tag {tag}"); + println!("Tagged commit {commit_sha} with tag v{next_version}"); Ok(()) } @@ -256,8 +293,9 @@ fn update_npm(next_version: &Version) -> Result<()> { "lib/binding_web/package.json", "crates/cli/npm/package.json", ] { - let package_json = - serde_json::from_str::(&std::fs::read_to_string(path)?)?; + let package_json = serde_json::from_str::( + &std::fs::read_to_string(path).with_context(|| format!("Failed to read {path}"))?, + )?; let mut package_json = package_json .as_object() diff --git a/crates/xtask/src/main.rs b/crates/xtask/src/main.rs index 1c59f4f4..57f81dae 100644 --- a/crates/xtask/src/main.rs +++ b/crates/xtask/src/main.rs @@ -9,12 +9,11 @@ mod generate; mod test; mod upgrade_wasmtime; -use std::path::Path; +use std::{path::Path, process::Command}; use anstyle::{AnsiColor, Color, Style}; use anyhow::Result; -use clap::{crate_authors, Args, Command, FromArgMatches as _, Subcommand}; -use git2::{Oid, Repository}; +use clap::{crate_authors, Args, FromArgMatches as _, Subcommand}; use semver::Version; #[derive(Subcommand)] @@ -205,7 +204,7 @@ fn run() -> Result<()> { ); let version: &'static str = Box::leak(version.into_boxed_str()); - let cli = Command::new("xtask") + let cli = clap::Command::new("xtask") .help_template( "\ {before-help}{name} {version} @@ -296,27 +295,34 @@ const fn get_styles() -> clap::builder::Styles { .placeholder(Style::new().fg_color(Some(Color::Ansi(AnsiColor::White)))) } -pub fn create_commit(repo: &Repository, msg: &str, paths: &[&str]) -> Result { - let mut index = repo.index()?; +pub fn create_commit(msg: &str, paths: &[&str]) -> Result { for path in paths { - index.add_path(Path::new(path))?; + let output = Command::new("git").args(["add", path]).output()?; + if !output.status.success() { + anyhow::bail!( + "Failed to add {path}: {}", + String::from_utf8_lossy(&output.stderr) + ); + } } - index.write()?; + let output = Command::new("git").args(["commit", "-m", msg]).output()?; + if !output.status.success() { + anyhow::bail!( + "Failed to commit: {}", + String::from_utf8_lossy(&output.stderr) + ); + } - let tree_id = index.write_tree()?; - let tree = repo.find_tree(tree_id)?; - let signature = repo.signature()?; - let parent_commit = repo.revparse_single("HEAD")?.peel_to_commit()?; + let output = Command::new("git").args(["rev-parse", "HEAD"]).output()?; + if !output.status.success() { + anyhow::bail!( + "Failed to get commit SHA: {}", + String::from_utf8_lossy(&output.stderr) + ); + } - Ok(repo.commit( - Some("HEAD"), - &signature, - &signature, - msg, - &tree, - &[&parent_commit], - )?) + Ok(String::from_utf8(output.stdout)?.trim().to_string()) } #[macro_export] diff --git a/crates/xtask/src/upgrade_wasmtime.rs b/crates/xtask/src/upgrade_wasmtime.rs index f4c39ddf..90e5b0f2 100644 --- a/crates/xtask/src/upgrade_wasmtime.rs +++ b/crates/xtask/src/upgrade_wasmtime.rs @@ -1,7 +1,6 @@ use std::process::Command; use anyhow::{Context, Result}; -use git2::Repository; use semver::Version; use crate::{create_commit, UpgradeWasmtime}; @@ -93,9 +92,7 @@ pub fn run(args: &UpgradeWasmtime) -> Result<()> { println!("Upgrading wasmtime for Zig"); update_zig(&args.version)?; - let repo = Repository::open(".")?; create_commit( - &repo, &format!("build(deps): bump wasmtime-c-api to v{}", args.version), &["lib/Cargo.toml", "Cargo.lock", "build.zig.zon"], )?;