Skip to content

Commit 0e233f4

Browse files
committed
Merge branch 'release-0.4.x' into mergify/bp/release-0.4.x/pr-6330
Signed-off-by: Charlie Doern <cdoern@redhat.com>
2 parents 0fdb70a + dd9622c commit 0e233f4

7 files changed

Lines changed: 236 additions & 183 deletions

File tree

.github/actions/setup-typescript-client/action.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ runs:
1818
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
1919
with:
2020
repository: llamastack/llama-stack-client-typescript
21-
ref: main
21+
# This is a release branch: pin to the matching release branch of the
22+
# client repo, whose package is still named "llama-stack-client".
23+
# The client repo's main branch has been renamed to "ogx-client".
24+
ref: release-0.4.x
2225
path: .ts-client-checkout
2326

2427
- name: Set TS_CLIENT_PATH

.github/workflows/pypi.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,11 @@ jobs:
255255
# Explicit override from workflow_dispatch
256256
echo "ref=${{ inputs.client_ref }}" >> $GITHUB_OUTPUT
257257
echo "Using explicit client_ref: ${{ inputs.client_ref }}"
258+
elif [[ "$GITHUB_BASE_REF" == release-* ]]; then
259+
# Pull request targeting a release branch — GITHUB_REF is refs/pull/N/merge,
260+
# so use the PR base branch name to pick the matching client release branch.
261+
echo "ref=$GITHUB_BASE_REF" >> $GITHUB_OUTPUT
262+
echo "Using PR base release branch: $GITHUB_BASE_REF"
258263
elif [[ "$GITHUB_REF" == refs/heads/release-* ]]; then
259264
# Running on a release branch — use the same branch name in client repos
260265
BRANCH="${GITHUB_REF#refs/heads/}"

containers/Containerfile

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ ARG PYPI_VERSION=""
2727
ARG TEST_PYPI_VERSION=""
2828
ARG KEEP_WORKSPACE=""
2929
ARG DISTRO_NAME="starter"
30+
# Tolerate failures of the OpenTelemetry per-library bootstrap. This release
31+
# branch is a pre-rename backfill whose pinned deps can conflict with the latest
32+
# auto-instrumentation packages.
33+
ARG OTEL_BEST_EFFORT="1"
3034
ARG RUN_CONFIG_PATH=""
3135
ARG UV_HTTP_TIMEOUT=500
3236
ARG UV_EXTRA_INDEX_URL=""
@@ -130,10 +134,20 @@ RUN set -eux; \
130134
printf '%s\n' "$deps" | xargs -L1 uv pip install --no-cache; \
131135
fi
132136

133-
# Install OpenTelemetry auto-instrumentation support
137+
# Install OpenTelemetry auto-instrumentation support.
138+
# The base distro/exporter install is required. The per-library bootstrap
139+
# (opentelemetry-bootstrap -a install) selects the latest instrumentation
140+
# packages, which can conflict with the pinned dependencies of older releases.
134141
RUN set -eux; \
135142
pip install --no-cache opentelemetry-distro opentelemetry-exporter-otlp; \
136-
opentelemetry-bootstrap -a install
143+
if ! opentelemetry-bootstrap -a install; then \
144+
if [ "$OTEL_BEST_EFFORT" = "1" ]; then \
145+
echo "opentelemetry-bootstrap failed; continuing without full auto-instrumentation (OTEL_BEST_EFFORT=1)" >&2; \
146+
else \
147+
echo "opentelemetry-bootstrap failed" >&2; \
148+
exit 1; \
149+
fi; \
150+
fi
137151

138152
# Cleanup
139153
RUN set -eux; \

pyproject.toml

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fallback_version = "0.4.6"
88
[tool.uv]
99
required-version = ">=0.7.0"
1010
constraint-dependencies = [
11-
"pyasn1>=0.6.4", # CVE-2026-30922: DoS via unbounded recursion
11+
"pyasn1>=0.6.4", # CVE-2026-30922, CVE-2026-59885: DoS via unbounded recursion
1212
"starlette>=1.0.1", # CVE-2026-48710
1313
]
1414

@@ -32,7 +32,7 @@ classifiers = [
3232
]
3333
dependencies = [
3434
"PyYAML>=6.0",
35-
"aiohttp>=3.13.3",
35+
"aiohttp>=3.14.0", # CVE-2026-34993: CookieJar.load() RCE
3636
"fastapi>=0.115.0,<1.0", # server
3737
"fire", # for MCP in LLS client
3838
"httpx",
@@ -41,8 +41,8 @@ dependencies = [
4141
"llama-stack-api", # API and provider specifications (local dev via tool.uv.sources)
4242
"openai>=2.5.0",
4343
"prompt-toolkit",
44-
"python-dotenv",
45-
"pyjwt[crypto]>=2.12.0", # Pull crypto to support RS256 for jwt. Requires 2.12.0+ to fix CVE-2026-32597.
44+
"python-dotenv>=1.2.2", # CVE-2026-28684: arbitrary file overwrite via symlink following
45+
"pyjwt[crypto]>=2.13.0", # Pull crypto to support RS256 for jwt. CVE-2026-48526: auth bypass via forged JWTs.
4646
"pydantic>=2.11.9",
4747
"rich",
4848
"termcolor",
@@ -59,7 +59,7 @@ dependencies = [
5959
"starlette>=0.49.1",
6060
"psycopg2-binary",
6161
"tornado>=6.5.3",
62-
"urllib3>=2.6.3",
62+
"urllib3>=2.7.0", # CVE-2026-44432: DoS via excessive decompression; CVE-2026-44431: cross-origin redirect header leak
6363
]
6464

6565
[project.optional-dependencies]
@@ -115,12 +115,14 @@ type_checking = [
115115
"ollama",
116116
"llama-stack-client==0.4.6",
117117
]
118-
# These are the dependencies required for running unit tests.
118+
# These are additional dependencies required for running unit tests beyond the
119+
# shared `test` dependency group.
119120
unit = [
120121
"anthropic",
121122
"databricks-sdk",
122123
"sqlite-vec",
123124
"ollama",
125+
"llama-stack-client==0.4.6",
124126
"aiosqlite",
125127
"aiohttp",
126128
"psycopg2-binary>=2.9.0",
@@ -129,17 +131,21 @@ unit = [
129131
"chardet",
130132
"sqlalchemy",
131133
"sqlalchemy[asyncio]>=2.0.41",
134+
"torch>=2.6.0",
135+
"torchvision>=0.21.0",
136+
"fairscale",
132137
"blobfile",
133138
"faiss-cpu",
134139
"litellm",
135140
"together",
136141
"coverage",
137142
"moto[s3]>=5.1.10",
138143
]
139-
# These are the core dependencies required for running integration tests. They are shared across all
140-
# providers. If a provider requires additional dependencies, please add them to your environment
141-
# separately. If you are using "uv" to execute your tests, you can use the "--group" flag to specify extra
142-
# dependencies.
144+
# These are the core dependencies shared across test environments. Integration
145+
# tests use this group directly, and the unit test wrapper installs it alongside
146+
# the `unit` group. If a provider requires additional dependencies, please add
147+
# them to your environment separately. If you are using "uv" to execute your
148+
# tests, you can use the "--group" flag to specify extra dependencies.
143149
test = [
144150
"aiosqlite",
145151
"aiohttp",

scripts/unit-tests.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ if [ $FOUND_PYTHON -ne 0 ]; then
2525
uv python install "$PYTHON_VERSION"
2626
fi
2727

28-
# Run unit tests with coverage
29-
uv run --python "$PYTHON_VERSION" --with-editable . --group unit \
28+
# Run unit tests with coverage. The shared `test` group provides core provider
29+
# dependencies, and `unit` layers on unit-only extras.
30+
uv run --python "$PYTHON_VERSION" --with-editable . --group test --group unit \
3031
coverage run --source=src/llama_stack -m pytest -s -v tests/unit/ "$@"

tests/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ This gives you:
2626

2727
You can run the unit tests with:
2828
```bash
29-
uv run --group unit pytest -sv tests/unit/
29+
uv run --group test --group unit pytest -sv tests/unit/
3030
```
3131

3232
For running integration tests, you must provide a few things:

0 commit comments

Comments
 (0)