fix: cache backend core builds and flush ssh output
This commit is contained in:
@@ -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 \
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user