Skip to content

Commit e6741d3

Browse files
committed
add optional debug output for dir diff
1 parent 018478e commit e6741d3

File tree

3 files changed

+56
-27
lines changed

3 files changed

+56
-27
lines changed

.gas-snapshot

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,9 @@ EstimateRefuelGasConstant:testFuzz_refuel_gasConstant(uint256,uint256,(address,u
2323
EstimateSweepDepositAccountERC20GasConstant:testFuzz_sweepDepositAccountERC20_gasConstant(uint256,uint256,(address,address,address,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3936, ~: 3928)
2424
EstimateSweepDepositAccountGasConstant:testFuzz_sweepDepositAccount_gasConstant(uint256,uint256,(address,address,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3817, ~: 3817)
2525
EstimateSweepSkipCCTPDepositAccountGasConstant:testFuzz_sweepSkipCCTPDepositAccount_gasConstant(uint256,uint256,(address,uint32,bytes32,uint256,(address,uint256,uint256,uint256))) (runs: 256, μ: 3797, ~: 3794)
26-
<<<<<<< HEAD
27-
EstimateTransferERC20GasConstant:testFuzz_transferERC20_gasConstant(uint256,uint256,(address,address,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4155, ~: 4151)
28-
EstimateTransferGasConstant:testFuzz_transfer_gasConstant(uint256,uint256,(address,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4061, ~: 4058)
29-
EstimateUniswapV3ExactInputConstant:testFuzz_uniswapV3ExactInput_gasConstant(uint256,uint256,(address,address,address,uint24,uint256,uint256,uint32,uint32,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4768, ~: 4690)
30-
=======
31-
EstimateTransferERC20GasConstant:testFuzz_transferERC20_gasConstant(uint256,uint256,(address,address,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4153, ~: 4151)
32-
EstimateTransferGasConstant:testFuzz_transfer_gasConstant(uint256,uint256,(address,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4059, ~: 4058)
33-
EstimateUniswapV3ExactInputConstant:testFuzz_uniswapV3ExactInput_gasConstant(uint256,uint256,(address,address,address,uint24,uint256,uint256,uint32,uint32,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4759, ~: 4690)
34-
>>>>>>> bbf1782 (fix gas snapshot`)
26+
EstimateTransferERC20GasConstant:testFuzz_transferERC20_gasConstant(uint256,uint256,(address,address,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4152, ~: 4151)
27+
EstimateTransferGasConstant:testFuzz_transfer_gasConstant(uint256,uint256,(address,uint256,uint256,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4062, ~: 4058)
28+
EstimateUniswapV3ExactInputConstant:testFuzz_uniswapV3ExactInput_gasConstant(uint256,uint256,(address,address,address,uint24,uint256,uint256,uint32,uint32,(uint256,uint256,uint256,uint256),(address,uint256,uint256,uint256))) (runs: 256, μ: 4771, ~: 4690)
3529
FeeTokenRegistryTest:test_addFeeToken_alreadyRegistered() (gas: 1898)
3630
FeeTokenRegistryTest:test_addFeeToken_happyPath() (gas: 37590)
3731
FeeTokenRegistryTest:test_addFeeToken_roundIdZero() (gas: 12004)
@@ -180,17 +174,12 @@ TreasuryTest:test_withdraw_invalidTarget() (gas: 10054)
180174
TreasuryTest:test_withdraw_transferFailed() (gas: 17211)
181175
UniswapV3ExactInputTest:test_uniswapV3ExactInput_amountInZero() (gas: 38530)
182176
UniswapV3ExactInputTest:test_uniswapV3ExactInput_ethToToken() (gas: 3064)
183-
<<<<<<< HEAD
184-
UniswapV3ExactInputTest:test_uniswapV3ExactInput_insufficientEthBalance() (gas: 80784)
185-
UniswapV3ExactInputTest:test_uniswapV3ExactInput_insufficientTokenBalance() (gas: 98213)
186-
=======
187-
UniswapV3ExactInputTest:test_uniswapV3ExactInput_insufficientEthBalance() (gas: 59018)
188-
UniswapV3ExactInputTest:test_uniswapV3ExactInput_insufficientTokenBalance() (gas: 76447)
189-
>>>>>>> bbf1782 (fix gas snapshot`)
177+
UniswapV3ExactInputTest:test_uniswapV3ExactInput_insufficientEthBalance() (gas: 81863)
178+
UniswapV3ExactInputTest:test_uniswapV3ExactInput_insufficientTokenBalance() (gas: 99292)
190179
UniswapV3ExactInputTest:test_uniswapV3ExactInput_nonExistentPool() (gas: 44571)
191180
UniswapV3ExactInputTest:test_uniswapV3ExactInput_priceDeviationTooHigh() (gas: 3019)
192181
UniswapV3ExactInputTest:test_uniswapV3ExactInput_receivedTooLittle() (gas: 3041)
193182
UniswapV3ExactInputTest:test_uniswapV3ExactInput_recipientZero() (gas: 38513)
194183
UniswapV3ExactInputTest:test_uniswapV3ExactInput_sameToken() (gas: 38484)
195184
UniswapV3ExactInputTest:test_uniswapV3ExactInput_tokenToEth() (gas: 3020)
196-
UniswapV3ExactInputTest:test_uniswapV3ExactInput_tokenToToken() (gas: 3042)
185+
UniswapV3ExactInputTest:test_uniswapV3ExactInput_tokenToToken() (gas: 3042)

.github/scripts/directory-comparison.rs

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ struct Cli {
3333
/// Pattern to ignore during comparison
3434
#[arg(long, env = "IGNORE_PATTERN")]
3535
ignore: Option<String>,
36+
37+
/// Show detailed differences when directories don't match
38+
#[arg(long, env = "SHOW_DIFF")]
39+
show_diff: bool,
3640
}
3741

3842
fn main() {
3943
let cli = Cli::parse();
4044

41-
match directories_match(&cli.dir1, &cli.dir2, cli.ignore.as_deref()) {
45+
match directories_match(&cli.dir1, &cli.dir2, cli.ignore.as_deref(), cli.show_diff) {
4246
Ok(true) => process::exit(0),
4347
Ok(false) => process::exit(1),
4448
Err(e) => {
@@ -48,7 +52,7 @@ fn main() {
4852
}
4953
}
5054

51-
fn directories_match(dir1: &str, dir2: &str, ignore: Option<&str>) -> Result<bool, Box<dyn Error>> {
55+
fn directories_match(dir1: &str, dir2: &str, ignore: Option<&str>, show_diff: bool) -> Result<bool, Box<dyn Error>> {
5256
let tree1 = MerkleTree::builder(dir1).build()?;
5357
let tree2 = MerkleTree::builder(dir2).build()?;
5458

@@ -62,21 +66,58 @@ fn directories_match(dir1: &str, dir2: &str, ignore: Option<&str>) -> Result<boo
6266
.map(|i| (i.path.relative.to_string(), i.hash.to_hex_string()))
6367
.collect();
6468

65-
Ok(files1 == files2)
69+
let matches = files1 == files2;
70+
if !matches && show_diff {
71+
print_differences(&files1, &files2, dir1, dir2);
72+
}
73+
74+
Ok(matches)
6675
}
6776

77+
// -- Helper functions --
78+
6879
fn should_ignore_path(relative_path: &camino::Utf8Path, ignore: Option<&str>) -> bool {
6980
let path_str = relative_path.as_str();
70-
7181
// Ignore empty paths
7282
if path_str.is_empty() {
7383
return true;
7484
}
75-
85+
7686
// Apply ignore pattern if provided
7787
ignore.map_or(false, |pattern| path_str.contains(pattern))
7888
}
7989

90+
fn print_differences(files1: &HashMap<String, String>, files2: &HashMap<String, String>, _dir1: &str, dir2: &str) {
91+
let mut diff_count = 0;
92+
93+
// Find different and missing files
94+
for (path, hash1) in files1 {
95+
match files2.get(path) {
96+
Some(hash2) if hash1 != hash2 => {
97+
println!("📝 {}: content differs", path);
98+
diff_count += 1;
99+
}
100+
None => {
101+
println!("❌ {}: missing in {}", path, dir2);
102+
diff_count += 1;
103+
}
104+
_ => {}
105+
}
106+
}
107+
108+
// Find extra files
109+
for path in files2.keys() {
110+
if !files1.contains_key(path) {
111+
println!("➕ {}: extra in {}", path, dir2);
112+
diff_count += 1;
113+
}
114+
}
115+
116+
println!("\n❌ Found {} differences", diff_count);
117+
}
118+
119+
// -- Tests --
120+
80121
#[cfg(test)]
81122
mod tests {
82123
use super::*;
@@ -104,7 +145,7 @@ mod tests {
104145
write_file(&dir1, "file.txt", "content");
105146
write_file(&dir2, "file.txt", "content");
106147

107-
assert!(directories_match(dir1.to_str().unwrap(), dir2.to_str().unwrap(), None).unwrap());
148+
assert!(directories_match(dir1.to_str().unwrap(), dir2.to_str().unwrap(), None, false).unwrap());
108149

109150
fs::remove_dir_all(&dir1).ok();
110151
fs::remove_dir_all(&dir2).ok();
@@ -122,7 +163,7 @@ mod tests {
122163
write_file(&dir1, "file.txt", "content A");
123164
write_file(&dir2, "file.txt", "content B");
124165

125-
assert!(!directories_match(dir1.to_str().unwrap(), dir2.to_str().unwrap(), None).unwrap());
166+
assert!(!directories_match(dir1.to_str().unwrap(), dir2.to_str().unwrap(), None, false).unwrap());
126167

127168
fs::remove_dir_all(&dir1).ok();
128169
fs::remove_dir_all(&dir2).ok();
@@ -142,7 +183,7 @@ mod tests {
142183
write_file(&dir1, "build-info/ignore.txt", "diff1");
143184
write_file(&dir2, "build-info/ignore.txt", "diff2");
144185

145-
assert!(directories_match(dir1.to_str().unwrap(), dir2.to_str().unwrap(), Some("build-info")).unwrap());
186+
assert!(directories_match(dir1.to_str().unwrap(), dir2.to_str().unwrap(), Some("build-info"), false).unwrap());
146187

147188
fs::remove_dir_all(&dir1).ok();
148189
fs::remove_dir_all(&dir2).ok();

.github/workflows/artifacts.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ jobs:
8383
- name: Compare and sync artifacts
8484
id: compare-artifacts
8585
run: |
86-
export IGNORE_PATTERN="build-info"
87-
if rust-script .github/scripts/directory-comparison.rs "./out" "./offchain/crates/contracts/artifacts" >/dev/null 2>&1; then
86+
if rust-script .github/scripts/directory-comparison.rs "./out" "./offchain/crates/contracts/artifacts" --ignore "build-info" --show-diff 2>&1; then
8887
echo "artifacts_match=true" >> $GITHUB_OUTPUT
8988
echo "✅ Artifacts match"
9089
else

0 commit comments

Comments
 (0)