fix: cache backend core builds and flush ssh output

This commit is contained in:
Codex
2026-06-07 04:31:58 +00:00
parent d56673d62d
commit 9812c694b1
2 changed files with 34 additions and 21 deletions
+8 -1
View File
@@ -1,11 +1,18 @@
# syntax=docker/dockerfile:1.7
FROM rust:1-bookworm AS build
WORKDIR /app/src/components/backend-core
ARG CARGO_BUILD_JOBS=1
ENV CARGO_BUILD_JOBS=${CARGO_BUILD_JOBS}
COPY src/components/backend-core/Cargo.toml ./Cargo.toml
COPY src/components/backend-core/Cargo.lock ./Cargo.lock
RUN mkdir -p src \
&& printf 'fn main() {}\n' > src/main.rs \
&& cargo build --release --locked --jobs "${CARGO_BUILD_JOBS}" \
&& rm -rf src
COPY src/components/backend-core/src ./src
RUN cargo build --release --jobs "${CARGO_BUILD_JOBS}"
RUN rm -f target/release/backend-core target/release/backend-core.d \
&& find target/release/.fingerprint -maxdepth 1 -type d -name 'unidesk-backend-core-*' -exec rm -rf {} + \
&& cargo build --release --locked --jobs "${CARGO_BUILD_JOBS}"
FROM postgres:16-bookworm
RUN apt-get update \
+26 -20
View File
@@ -11,6 +11,18 @@ use tokio_tungstenite::tungstenite::Message;
use crate::http::internal_fetch_json;
async fn write_stdout(bytes: &[u8]) {
let mut stdout = tokio::io::stdout();
let _ = stdout.write_all(bytes).await;
let _ = stdout.flush().await;
}
async fn write_stderr(bytes: &[u8]) {
let mut stderr = tokio::io::stderr();
let _ = stderr.write_all(bytes).await;
let _ = stderr.flush().await;
}
pub async fn handle_cli() -> anyhow::Result<bool> {
let mut args = env::args().skip(1).collect::<Vec<_>>();
if args.is_empty() {
@@ -171,16 +183,12 @@ async fn ssh_broker_cli(args: Vec<String>) -> anyhow::Result<()> {
loop {
let message = tokio::select! {
_ = &mut runtime_timer => {
let _ = tokio::io::stderr()
.write_all(format!("unidesk ssh bridge runtime timeout after {runtime_timeout_ms}ms\n").as_bytes())
.await;
write_stderr(format!("unidesk ssh bridge runtime timeout after {runtime_timeout_ms}ms\n").as_bytes()).await;
exit_code = 124;
break;
}
_ = &mut open_timer, if !opened => {
let _ = tokio::io::stderr()
.write_all(format!("unidesk ssh bridge timed out waiting for provider session after {open_timeout_ms}ms\n").as_bytes())
.await;
write_stderr(format!("unidesk ssh bridge timed out waiting for provider session after {open_timeout_ms}ms\n").as_bytes()).await;
exit_code = 255;
break;
}
@@ -207,13 +215,12 @@ async fn ssh_broker_cli(args: Vec<String>) -> anyhow::Result<()> {
.decode(data)
.unwrap_or_default();
if parsed.get("stream").and_then(Value::as_str) == Some("stderr") {
let _ = tokio::io::stderr().write_all(&bytes).await;
write_stderr(&bytes).await;
} else {
let _ = tokio::io::stdout().write_all(&bytes).await;
write_stdout(&bytes).await;
}
}
"ssh.exit" => {
opened = true;
exit_code = parsed
.get("exitCode")
.and_then(Value::as_i64)
@@ -221,18 +228,17 @@ async fn ssh_broker_cli(args: Vec<String>) -> anyhow::Result<()> {
break;
}
"ssh.error" => {
let _ = tokio::io::stderr()
.write_all(
format!(
"{}\n",
parsed
.get("message")
.and_then(Value::as_str)
.unwrap_or("ssh error")
)
.as_bytes(),
write_stderr(
format!(
"{}\n",
parsed
.get("message")
.and_then(Value::as_str)
.unwrap_or("ssh error")
)
.await;
.as_bytes(),
)
.await;
exit_code = 255;
break;
}