Skip to content

Commit b8cfdca

Browse files
authored
Merge pull request #190 from tower/develop
v0.3.46 release
2 parents ff17490 + 076e986 commit b8cfdca

7 files changed

Lines changed: 58 additions & 32 deletions

File tree

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ resolver = "2"
44

55
[workspace.package]
66
edition = "2021"
7-
version = "0.3.45"
7+
version = "0.3.46"
88
description = "Tower is the best way to host Python data apps in production"
99
rust-version = "1.81"
1010
authors = ["Brad Heller <brad@tower.dev>"]

crates/tower-cmd/src/util/apps.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,7 @@ pub async fn ensure_app_exists(
9696
}
9797
Err(create_err) => {
9898
spinner.failure();
99-
Err(crate::Error::ApiCreateAppError {
100-
source: create_err,
101-
})
99+
Err(crate::Error::ApiCreateAppError { source: create_err })
102100
}
103101
}
104102
}

crates/tower-runtime/src/subprocess.rs

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,32 +35,51 @@ impl SubprocessBackend {
3535
/// Returns the Package (which keeps the temp directory alive)
3636
async fn receive_and_unpack_package(
3737
&self,
38+
ctx: &tower_telemetry::Context,
3839
mut package_stream: Box<dyn tokio::io::AsyncRead + Send + Unpin>,
3940
) -> Result<Package, Error> {
41+
use tower_telemetry::{debug, error, info};
4042
// Create temp directory for this package
41-
let temp_dir = TmpDir::new("tower-package")
42-
.await
43-
.map_err(|_| Error::PackageCreateFailed)?;
43+
let temp_dir = TmpDir::new("tower-package").await.map_err(|e| {
44+
error!(ctx: ctx, "Failed to create temp directory: {:?}", e);
45+
Error::PackageCreateFailed
46+
})?;
4447

4548
// Save stream to tar.gz file
4649
let tar_gz_path = temp_dir.to_path_buf().join("package.tar.gz");
47-
let mut file = File::create(&tar_gz_path)
48-
.await
49-
.map_err(|_| Error::PackageCreateFailed)?;
50+
debug!(ctx: ctx, "Saving package stream to {:?}", tar_gz_path);
5051

51-
tokio::io::copy(&mut package_stream, &mut file)
52+
let mut file = File::create(&tar_gz_path).await.map_err(|e| {
53+
error!(ctx: ctx, "Failed to create package file: {:?}", e);
54+
Error::PackageCreateFailed
55+
})?;
56+
57+
let bytes_copied = tokio::io::copy(&mut package_stream, &mut file)
5258
.await
53-
.map_err(|_| Error::PackageCreateFailed)?;
59+
.map_err(|e| {
60+
error!(ctx: ctx, "Failed to save package stream: {:?}", e);
61+
Error::PackageCreateFailed
62+
})?;
63+
64+
debug!(ctx: ctx, "Downloaded {} bytes", bytes_copied);
5465

55-
file.flush().await.map_err(|_| Error::PackageCreateFailed)?;
66+
file.flush().await.map_err(|e| {
67+
error!(ctx: ctx, "Failed to flush package file: {:?}", e);
68+
Error::PackageCreateFailed
69+
})?;
5670
drop(file);
5771

5872
// Unpack the package
73+
info!(ctx: ctx, "Unpacking package");
5974
let mut package = Package::default();
6075
package.package_file_path = Some(tar_gz_path);
6176
package.tmp_dir = Some(temp_dir);
62-
package.unpack().await?;
77+
package.unpack().await.map_err(|e| {
78+
error!(ctx: ctx, "Failed to unpack package: {:?}", e);
79+
Error::PackageUnpackFailed
80+
})?;
6381

82+
info!(ctx: ctx, "Successfully unpacked package");
6483
Ok(package)
6584
}
6685
}
@@ -93,7 +112,9 @@ impl ExecutionBackend for SubprocessBackend {
93112
};
94113

95114
// Receive package stream and unpack it
96-
let mut package = self.receive_and_unpack_package(spec.package_stream).await?;
115+
let mut package = self
116+
.receive_and_unpack_package(&spec.telemetry_ctx, spec.package_stream)
117+
.await?;
97118

98119
let unpacked_path = package
99120
.unpacked_path

crates/tower-uv/src/lib.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ pub fn cleanup_stale_uv_lock_files() {
159159
Ok(f) => f,
160160
Err(e) => {
161161
debug!("Failed to open lock file {:?}: {:?}", path, e);
162-
continue
162+
continue;
163163
}
164164
};
165165

@@ -187,7 +187,8 @@ fn is_uv_lock_file_name<S: AsRef<std::ffi::OsStr>>(lock_name: S) -> bool {
187187
let uv_lock_pattern = Regex::new(r"^uv-[0-9a-f]{16}\.lock$").unwrap();
188188
let os_str = lock_name.as_ref();
189189

190-
os_str.to_str()
190+
os_str
191+
.to_str()
191192
.map(|name| uv_lock_pattern.is_match(name))
192193
.unwrap_or(false)
193194
}
@@ -567,10 +568,16 @@ mod tests {
567568
cleanup_stale_uv_lock_files();
568569

569570
// UV lock file should be removed (it wasn't locked)
570-
assert!(!uv_lock_file.exists(), "UV lock file should have been cleaned up");
571+
assert!(
572+
!uv_lock_file.exists(),
573+
"UV lock file should have been cleaned up"
574+
);
571575

572576
// Non-UV file should still exist
573-
assert!(non_uv_file.exists(), "Non-UV file should not have been touched");
577+
assert!(
578+
non_uv_file.exists(),
579+
"Non-UV file should not have been touched"
580+
);
574581

575582
// Clean up the non-UV file
576583
let _ = fs::remove_file(&non_uv_file);

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "maturin"
44

55
[project]
66
name = "tower"
7-
version = "0.3.45"
7+
version = "0.3.46"
88
description = "Tower CLI and runtime environment for Tower."
99
authors = [{ name = "Tower Computing Inc.", email = "brad@tower.dev" }]
1010
readme = "README.md"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)