fix: repair beta Docker image

This commit is contained in:
Mohamed Boudra
2026-06-27 09:09:52 +00:00
parent 62bdb52eaa
commit ab3ed56513
6 changed files with 79 additions and 5 deletions
+2
View File
@@ -29,6 +29,8 @@
- Closing Claude Code sessions no longer leaves child processes running ([#1540](https://github.com/getpaseo/paseo/pull/1540) by [@TommyLike](https://github.com/TommyLike)) - Closing Claude Code sessions no longer leaves child processes running ([#1540](https://github.com/getpaseo/paseo/pull/1540) by [@TommyLike](https://github.com/TommyLike))
- OpenCode no longer indexes your home directory by mistake ([#1704](https://github.com/getpaseo/paseo/pull/1704) by [@rex-chang](https://github.com/rex-chang)) - OpenCode no longer indexes your home directory by mistake ([#1704](https://github.com/getpaseo/paseo/pull/1704) by [@rex-chang](https://github.com/rex-chang))
- ACP sessions load with the correct project folder and MCP server settings ([#1624](https://github.com/getpaseo/paseo/pull/1624) by [@theslava](https://github.com/theslava)) - ACP sessions load with the correct project folder and MCP server settings ([#1624](https://github.com/getpaseo/paseo/pull/1624) by [@theslava](https://github.com/theslava))
- Docker images serve the bundled web UI from global installs
- Docker images can extract downloaded local speech models
## 0.1.101 - 2026-06-26 ## 0.1.101 - 2026-06-26
+1
View File
@@ -27,6 +27,7 @@ RUN set -eux; \
curl \ curl \
git \ git \
gosu \ gosu \
lbzip2 \
openssh-client \ openssh-client \
tini; \ tini; \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
+1
View File
@@ -48,6 +48,7 @@ RUN set -eux; \
curl \ curl \
git \ git \
gosu \ gosu \
lbzip2 \
openssh-client \ openssh-client \
tini; \ tini; \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
+6 -5
View File
@@ -10,7 +10,8 @@ The image source lives in [`docker/`](../docker/).
The official image: The official image:
- installs `@getpaseo/server` and `@getpaseo/cli` from npm - installs `@getpaseo/server` and `@getpaseo/cli` from npm for stable images,
or from source-built workspace tarballs for beta images
- runs the daemon as the non-root `paseo` user - runs the daemon as the non-root `paseo` user
- listens on `0.0.0.0:6767` inside the container - listens on `0.0.0.0:6767` inside the container
- enables the bundled daemon web UI with `PASEO_WEB_UI_ENABLED=true` - enables the bundled daemon web UI with `PASEO_WEB_UI_ENABLED=true`
@@ -202,10 +203,10 @@ docker build \
``` ```
The Docker workflow builds the image on pull requests and on `main` as a The Docker workflow builds the image on pull requests and on `main` as a
non-publishing check. GHCR publishing follows the stable release cadence: only a non-publishing check. Stable `vX.Y.Z` tag pushes publish
stable `vX.Y.Z` tag push publishes `ghcr.io/getpaseo/paseo:X.Y.Z` and `ghcr.io/getpaseo/paseo:X.Y.Z` and `ghcr.io/getpaseo/paseo:latest`. Beta tags
`ghcr.io/getpaseo/paseo:latest`. Beta tags and manual workflow runs build for publish only the exact prerelease tag, such as
validation only. `ghcr.io/getpaseo/paseo:0.1.102-beta.1`, and do not update `latest`.
The published image is multi-arch for `linux/amd64` and `linux/arm64`. The published image is multi-arch for `linux/amd64` and `linux/arm64`.
+61
View File
@@ -0,0 +1,61 @@
import path from "node:path";
import { pathToFileURL } from "node:url";
import { describe, expect, test } from "vitest";
import { resolveBundledWebUiDistDir } from "./config.js";
function fileUrlFor(...segments: string[]): URL {
return pathToFileURL(path.join(path.parse(process.cwd()).root, ...segments));
}
describe("server config", () => {
test("resolves bundled web UI path from source-tree modules", () => {
expect(
resolveBundledWebUiDistDir(
fileUrlFor("repo", "packages", "server", "src", "server", "config.ts"),
),
).toBe(
path.join(
path.parse(process.cwd()).root,
"repo",
"packages",
"server",
"dist",
"server",
"web-ui",
),
);
});
test("resolves bundled web UI path from globally installed compiled modules", () => {
expect(
resolveBundledWebUiDistDir(
fileUrlFor(
"usr",
"local",
"lib",
"node_modules",
"@getpaseo",
"server",
"dist",
"server",
"server",
"config.js",
),
),
).toBe(
path.join(
path.parse(process.cwd()).root,
"usr",
"local",
"lib",
"node_modules",
"@getpaseo",
"server",
"dist",
"server",
"web-ui",
),
);
});
});
+8
View File
@@ -34,6 +34,14 @@ export function resolveBundledWebUiDistDir(moduleUrl: string | URL = import.meta
return path.resolve(moduleDir, "..", "..", "dist", "server", "web-ui"); return path.resolve(moduleDir, "..", "..", "dist", "server", "web-ui");
} }
if (
path.basename(moduleDir) === "server" &&
path.basename(path.dirname(moduleDir)) === "server" &&
path.basename(path.dirname(path.dirname(moduleDir))) === "dist"
) {
return path.resolve(moduleDir, "..", "web-ui");
}
return path.resolve(moduleDir, "web-ui"); return path.resolve(moduleDir, "web-ui");
} }