Skip to content

Commit 0a1b686

Browse files
authored
Merge pull request #782 from diegosouzapw/release/v3.3.3
chore(release): v3.3.3 — UI bugfixes and AutoUpdate repairs
2 parents 76a6d82 + d69e7ec commit 0a1b686

13 files changed

Lines changed: 217 additions & 71 deletions

File tree

.github/workflows/ci.yml

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ jobs:
1818
name: Lint
1919
runs-on: ubuntu-latest
2020
steps:
21-
- uses: actions/checkout@v6
22-
- uses: actions/setup-node@v6
21+
- uses: actions/checkout@v4
22+
- uses: actions/setup-node@v4
2323
with:
2424
node-version: 22
2525
cache: npm
@@ -36,8 +36,8 @@ jobs:
3636
name: Security Audit
3737
runs-on: ubuntu-latest
3838
steps:
39-
- uses: actions/checkout@v6
40-
- uses: actions/setup-node@v6
39+
- uses: actions/checkout@v4
40+
- uses: actions/setup-node@v4
4141
with:
4242
node-version: 22
4343
cache: npm
@@ -55,8 +55,8 @@ jobs:
5555
matrix:
5656
node-version: [20, 22]
5757
steps:
58-
- uses: actions/checkout@v6
59-
- uses: actions/setup-node@v6
58+
- uses: actions/checkout@v4
59+
- uses: actions/setup-node@v4
6060
with:
6161
node-version: ${{ matrix.node-version }}
6262
cache: npm
@@ -74,8 +74,8 @@ jobs:
7474
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
7575
API_KEY_SECRET: ci-test-api-key-secret-long
7676
steps:
77-
- uses: actions/checkout@v6
78-
- uses: actions/setup-node@v6
77+
- uses: actions/checkout@v4
78+
- uses: actions/setup-node@v4
7979
with:
8080
node-version: ${{ matrix.node-version }}
8181
cache: npm
@@ -90,8 +90,8 @@ jobs:
9090
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
9191
API_KEY_SECRET: ci-test-api-key-secret-long
9292
steps:
93-
- uses: actions/checkout@v6
94-
- uses: actions/setup-node@v6
93+
- uses: actions/checkout@v4
94+
- uses: actions/setup-node@v4
9595
with:
9696
node-version: 22
9797
cache: npm
@@ -109,8 +109,8 @@ jobs:
109109
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
110110
API_KEY_SECRET: ci-test-api-key-secret-long
111111
steps:
112-
- uses: actions/checkout@v6
113-
- uses: actions/setup-node@v6
112+
- uses: actions/checkout@v4
113+
- uses: actions/setup-node@v4
114114
with:
115115
node-version: 22
116116
cache: npm
@@ -129,8 +129,8 @@ jobs:
129129
INITIAL_PASSWORD: ci-test-password-for-integration
130130
DATA_DIR: /tmp/omniroute-ci
131131
steps:
132-
- uses: actions/checkout@v6
133-
- uses: actions/setup-node@v6
132+
- uses: actions/checkout@v4
133+
- uses: actions/setup-node@v4
134134
with:
135135
node-version: 22
136136
cache: npm
@@ -145,8 +145,8 @@ jobs:
145145
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
146146
API_KEY_SECRET: ci-test-api-key-secret-long
147147
steps:
148-
- uses: actions/checkout@v6
149-
- uses: actions/setup-node@v6
148+
- uses: actions/checkout@v4
149+
- uses: actions/setup-node@v4
150150
with:
151151
node-version: 22
152152
cache: npm

.github/workflows/docker-publish.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,24 @@ jobs:
2525
IMAGE_NAME: diegosouzapw/omniroute
2626
steps:
2727
- name: Checkout
28-
uses: actions/checkout@v6
28+
uses: actions/checkout@v4
2929
with:
3030
ref: ${{ github.event_name == 'workflow_dispatch' && format('refs/tags/v{0}', inputs.version) || '' }}
3131

3232
- name: Set up QEMU (for multi-arch builds)
33-
uses: docker/setup-qemu-action@v4
33+
uses: docker/setup-qemu-action@v3
3434

3535
- name: Set up Docker Buildx
36-
uses: docker/setup-buildx-action@v4
36+
uses: docker/setup-buildx-action@v3
3737

3838
- name: Login to Docker Hub
39-
uses: docker/login-action@v4
39+
uses: docker/login-action@v3
4040
with:
4141
username: ${{ secrets.DOCKERHUB_USERNAME }}
4242
password: ${{ secrets.DOCKERHUB_TOKEN }}
4343

4444
- name: Login to GitHub Container Registry
45-
uses: docker/login-action@v4
45+
uses: docker/login-action@v3
4646
with:
4747
registry: ghcr.io
4848
username: ${{ github.actor }}
@@ -61,7 +61,7 @@ jobs:
6161
echo "Publishing Docker image: $IMAGE_NAME:$VERSION"
6262
6363
- name: Build and push multi-arch image
64-
uses: docker/build-push-action@v7
64+
uses: docker/build-push-action@v6
6565
with:
6666
context: .
6767
target: runner-base
@@ -83,7 +83,7 @@ jobs:
8383
docker buildx imagetools inspect "${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}"
8484
8585
- name: Update Docker Hub description
86-
uses: peter-evans/dockerhub-description@v5
86+
uses: peter-evans/dockerhub-description@v4
8787
with:
8888
username: ${{ secrets.DOCKERHUB_USERNAME }}
8989
password: ${{ secrets.DOCKERHUB_TOKEN }}

.github/workflows/electron-release.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
version: ${{ steps.validate.outputs.version }}
2323
steps:
2424
- name: Checkout code
25-
uses: actions/checkout@v6
25+
uses: actions/checkout@v4
2626
with:
2727
fetch-depth: 0
2828

@@ -70,16 +70,16 @@ jobs:
7070

7171
steps:
7272
- name: Checkout
73-
uses: actions/checkout@v6
73+
uses: actions/checkout@v4
7474

7575
- name: Setup Node.js
76-
uses: actions/setup-node@v6
76+
uses: actions/setup-node@v4
7777
with:
7878
node-version: 22
7979
cache: npm
8080

8181
- name: Cache node_modules
82-
uses: actions/cache@v5
82+
uses: actions/cache@v4
8383
with:
8484
path: node_modules
8585
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
@@ -146,7 +146,7 @@ jobs:
146146
fi
147147
148148
- name: Upload artifacts
149-
uses: actions/upload-artifact@v7
149+
uses: actions/upload-artifact@v4
150150
with:
151151
name: electron-${{ matrix.platform }}
152152
path: release-assets/
@@ -157,12 +157,12 @@ jobs:
157157
runs-on: ubuntu-latest
158158
steps:
159159
- name: Checkout
160-
uses: actions/checkout@v6
160+
uses: actions/checkout@v4
161161
with:
162162
fetch-depth: 0
163163

164164
- name: Download all artifacts
165-
uses: actions/download-artifact@v8
165+
uses: actions/download-artifact@v4
166166
with:
167167
path: release-assets
168168
merge-multiple: true

.github/workflows/npm-publish.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ jobs:
4343
environment: NPM_TOKEN
4444
steps:
4545
- name: Checkout
46-
uses: actions/checkout@v6
46+
uses: actions/checkout@v4
4747

4848
- name: Setup Node.js
49-
uses: actions/setup-node@v6
49+
uses: actions/setup-node@v4
5050
with:
5151
node-version: 22
5252
registry-url: https://registry.npmjs.org
@@ -111,11 +111,11 @@ jobs:
111111
run: |
112112
VERSION="${{ steps.resolve.outputs.version }}"
113113
TAG="${{ steps.resolve.outputs.tag }}"
114-
114+
115115
echo "Configuring for GitHub Packages..."
116116
echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > .npmrc
117117
npm pkg set name="@diegosouzapw/omniroute"
118-
118+
119119
if [ "$TAG" = "latest" ]; then
120120
npm publish --registry=https://npm.pkg.github.com || echo "⚠️ Version ${VERSION} might already be published on GitHub."
121121
else

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44

55
---
66

7+
## [3.3.3] - 2026-03-29
8+
9+
### 🐛 Bug Fixes
10+
11+
- **CI/CD Reliability:** Patched GitHub Actions to stable dependency versions (`actions/checkout@v4`, `actions/upload-artifact@v4`) to mitigate unannounced builder environment deprecations.
12+
- **Image Fallbacks:** Replaced arbitrary fallback chains in `ProviderIcon.tsx` with explicit asset validation to prevent UI loading `<Image>` components for files that don't exist, eliminating `404` errors in dashboard console logs (#745).
13+
- **Admin Updater:** Dynamic source-installation detection for the dashboard Updater. Safely disables the `Update Now` button when OmniRoute is built locally rather than through npm, prompting for `git pull` (#743).
14+
- **Update ERESOLVE Error:** Injected `package.json` overrides for `react`/`react-dom` and enabled `--legacy-peer-deps` within the internal automatic updater scripts to resolve breaking dependency tree conflicts with `@lobehub/ui`.
15+
16+
---
17+
718
## [3.3.2] - 2026-03-29
819

920
### ✨ New Features

docs/openapi.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
openapi: 3.1.0
22
info:
33
title: OmniRoute API
4-
version: 3.3.2
4+
version: 3.3.3
55
description: |
66
OmniRoute is a local-first AI API proxy router. It provides an OpenAI-compatible
77
endpoint that routes requests to multiple AI providers with load balancing,

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "omniroute",
3-
"version": "3.3.2",
3+
"version": "3.3.3",
44
"description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
55
"type": "module",
66
"bin": {
@@ -162,6 +162,8 @@
162162
},
163163
"overrides": {
164164
"dompurify": "^3.3.2",
165-
"path-to-regexp": "^8.4.0"
165+
"path-to-regexp": "^8.4.0",
166+
"react": "$react",
167+
"react-dom": "$react-dom"
166168
}
167169
}

src/app/(dashboard)/dashboard/HomePageClient.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -546,18 +546,22 @@ export default function HomePageClient({ machineId }) {
546546
<div>
547547
<p className="font-semibold text-sm">Update Available: v{versionInfo.latest}</p>
548548
<p className="text-xs opacity-80 mt-0.5">
549-
{t("updateAvailableDesc") ||
550-
`You are currently using v${versionInfo.current}. Update to access the latest features and bug fixes.`}
549+
{versionInfo.autoUpdateSupported
550+
? t("updateAvailableDesc") ||
551+
`You are currently using v${versionInfo.current}. Update to access the latest features and bug fixes.`
552+
: versionInfo.autoUpdateError ||
553+
"Manual update required for this installation type."}
551554
</p>
552555
</div>
553556
</div>
554557
<Button
555558
size="sm"
556-
onClick={handleUpdate}
557-
disabled={updating}
559+
onClick={versionInfo.autoUpdateSupported ? handleUpdate : undefined}
560+
disabled={updating || !versionInfo.autoUpdateSupported}
558561
className="shrink-0 ml-4 font-semibold"
562+
title={versionInfo.autoUpdateError || ""}
559563
>
560-
{t("updateNow") || "Update Now"}
564+
{versionInfo.autoUpdateSupported ? t("updateNow") || "Update Now" : "Manual Update"}
561565
</Button>
562566
</div>
563567
)}

src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Card from "@/shared/components/Card";
77
import Badge from "@/shared/components/Badge";
88
import QuotaProgressBar from "./QuotaProgressBar";
99
import { calculatePercentage } from "./utils";
10+
import ProviderIcon from "@/shared/components/ProviderIcon";
1011

1112
const planVariants = {
1213
free: "default",
@@ -70,15 +71,7 @@ export default function ProviderLimitCard({
7071
{provider?.slice(0, 2).toUpperCase() || "PR"}
7172
</span>
7273
) : (
73-
<Image
74-
src={`/providers/${provider}.png`}
75-
alt={provider || t("providerLimits")}
76-
width={40}
77-
height={40}
78-
className="object-contain rounded-lg"
79-
sizes="40px"
80-
onError={() => setImgError(true)}
81-
/>
74+
<ProviderIcon providerId={provider} size={40} />
8275
)}
8376
</div>
8477

0 commit comments

Comments
 (0)