Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'xtask/src/dist.rs')
-rw-r--r--xtask/src/dist.rs38
1 files changed, 37 insertions, 1 deletions
diff --git a/xtask/src/dist.rs b/xtask/src/dist.rs
index 410276bc45..74715c53ea 100644
--- a/xtask/src/dist.rs
+++ b/xtask/src/dist.rs
@@ -1,12 +1,13 @@
use std::{
env,
fs::File,
- io,
+ io::{self, BufWriter},
path::{Path, PathBuf},
};
use flate2::{write::GzEncoder, Compression};
use xshell::{cmd, Shell};
+use zip::{write::FileOptions, DateTime, ZipWriter};
use crate::{date_iso, flags, project_root};
@@ -89,6 +90,9 @@ fn dist_server(sh: &Shell, release: &str, target: &Target) -> anyhow::Result<()>
let dst = Path::new("dist").join(&target.artifact_name);
gzip(&target.server_path, &dst.with_extension("gz"))?;
+ if target_name.contains("-windows-") {
+ zip(&target.server_path, target.symbols_path.as_ref(), &dst.with_extension("zip"))?;
+ }
Ok(())
}
@@ -101,6 +105,38 @@ fn gzip(src_path: &Path, dest_path: &Path) -> anyhow::Result<()> {
Ok(())
}
+fn zip(src_path: &Path, symbols_path: Option<&PathBuf>, dest_path: &Path) -> anyhow::Result<()> {
+ let file = File::create(dest_path)?;
+ let mut writer = ZipWriter::new(BufWriter::new(file));
+ writer.start_file(
+ src_path.file_name().unwrap().to_str().unwrap(),
+ FileOptions::default()
+ .last_modified_time(
+ DateTime::from_time(std::fs::metadata(src_path)?.modified()?.into()).unwrap(),
+ )
+ .unix_permissions(0o755)
+ .compression_method(zip::CompressionMethod::Deflated)
+ .compression_level(Some(9)),
+ )?;
+ let mut input = io::BufReader::new(File::open(src_path)?);
+ io::copy(&mut input, &mut writer)?;
+ if let Some(symbols_path) = symbols_path {
+ writer.start_file(
+ symbols_path.file_name().unwrap().to_str().unwrap(),
+ FileOptions::default()
+ .last_modified_time(
+ DateTime::from_time(std::fs::metadata(src_path)?.modified()?.into()).unwrap(),
+ )
+ .compression_method(zip::CompressionMethod::Deflated)
+ .compression_level(Some(9)),
+ )?;
+ let mut input = io::BufReader::new(File::open(symbols_path)?);
+ io::copy(&mut input, &mut writer)?;
+ }
+ writer.finish()?;
+ Ok(())
+}
+
struct Target {
name: String,
server_path: PathBuf,