Skip to content

Commit 4cc656e

Browse files
committed
rust: calculate and upload SHA256SUMS file during release
For integrity verification. Ideally we'd also GPG sign. That can be done later.
1 parent 5d4c776 commit 4cc656e

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

Cargo.lock

Lines changed: 73 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ duct = "0"
1212
flate2 = "1"
1313
futures = "0"
1414
goblin = "0"
15+
hex = "0"
1516
octocrab = { version = "0", features = ["rustls"] }
1617
once_cell = "1"
1718
rayon = "1"
@@ -20,6 +21,7 @@ scroll = "0"
2021
semver = "1"
2122
serde_json = "1"
2223
serde = { version = "1", features = ["derive"] }
24+
sha2 = "0"
2325
tar = "0"
2426
tempfile = "3"
2527
tokio = "1"

src/github.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use {
1212
Octocrab, OctocrabBuilder,
1313
},
1414
rayon::prelude::*,
15+
sha2::{Digest, Sha256},
1516
std::{
1617
collections::{BTreeMap, BTreeSet},
1718
io::Read,
@@ -327,15 +328,39 @@ pub async fn command_upload_release_distributions(args: &ArgMatches) -> Result<(
327328
));
328329
};
329330

331+
let mut digests = BTreeMap::new();
332+
330333
for (source, dest) in wanted_filenames {
331334
if !filenames.contains(&source) {
332335
continue;
333336
}
334337

335338
let file_data = std::fs::read(dist_dir.join(&source))?;
336339

340+
let mut digest = Sha256::new();
341+
digest.update(&file_data);
342+
343+
digests.insert(dest.clone(), hex::encode(digest.finalize()));
344+
337345
upload_release_artifact(&client, &release, &dest, file_data, dry_run).await?;
338346
}
339347

348+
let shasums = digests
349+
.iter()
350+
.map(|(filename, digest)| format!("{} {}\n", digest, filename))
351+
.collect::<Vec<_>>()
352+
.join("");
353+
354+
std::fs::write(dist_dir.join("SHA256SUMS"), shasums.as_bytes())?;
355+
356+
upload_release_artifact(
357+
&client,
358+
&release,
359+
"SHA256SUMS",
360+
shasums.into_bytes(),
361+
dry_run,
362+
)
363+
.await?;
364+
340365
Ok(())
341366
}

0 commit comments

Comments
 (0)