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

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))
- 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))
- Docker images serve the bundled web UI from global installs
- Docker images can extract downloaded local speech models
## 0.1.101 - 2026-06-26

View File

@@ -27,6 +27,7 @@ RUN set -eux; \
curl \
git \
gosu \
lbzip2 \
openssh-client \
tini; \
rm -rf /var/lib/apt/lists/*

View File

@@ -48,6 +48,7 @@ RUN set -eux; \
curl \
git \
gosu \
lbzip2 \
openssh-client \
tini; \
rm -rf /var/lib/apt/lists/*

View File

@@ -10,7 +10,8 @@ The image source lives in [`docker/`](../docker/).
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
- listens on `0.0.0.0:6767` inside the container
- 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
non-publishing check. GHCR publishing follows the stable release cadence: only a
stable `vX.Y.Z` tag push publishes `ghcr.io/getpaseo/paseo:X.Y.Z` and
`ghcr.io/getpaseo/paseo:latest`. Beta tags and manual workflow runs build for
validation only.
non-publishing check. Stable `vX.Y.Z` tag pushes publish
`ghcr.io/getpaseo/paseo:X.Y.Z` and `ghcr.io/getpaseo/paseo:latest`. Beta tags
publish only the exact prerelease tag, such as
`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`.

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",
),
);
});
});

View File

@@ -34,6 +34,14 @@ export function resolveBundledWebUiDistDir(moduleUrl: string | URL = import.meta
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");
}