Skip to content
Open

v1.5.16 #4518

Show file tree
Hide file tree
Changes from 55 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
839f16a
fix: fixes redaction setting in plugins config (#4486)
roroghost17 Jun 17, 2026
3caf63d
feat: adds scripts to seed and delete bifrost and litellm entities
sammaji Jun 14, 2026
004cc14
feat: adds scripts to migrate litellm entities to bifrost entities
sammaji Jun 14, 2026
0387f60
feat: adds conformance tests
sammaji Jun 14, 2026
2278c80
fix: fix 403 errors for list models request
roroghost17 Jun 17, 2026
e25251f
chore: updated the default network config timings
roroghost17 Jun 17, 2026
a67098f
fix: helm release tag to the correct commit
BearTS Jun 18, 2026
4bfc551
[docs] : docs for source of truth
Madhuvod Jun 17, 2026
010c702
fixes canonical_model_view migration
akshaydeo Jun 18, 2026
fc0c813
docs: adds docs for Claude Desktop with inference provider
roroghost17 Jun 18, 2026
ea4fc47
feat: adds group traces by sessions to config json and helm
roroghost17 Jun 18, 2026
492c647
fix: model id in bedrock batch request
Jun 18, 2026
f66590d
fix: resolve model names for feature gating
Jun 18, 2026
a3e1992
fix: nova bedrock fixes
Jun 18, 2026
d06b94d
fix: bedrock signauture fix for minimax
Jun 18, 2026
bbfca36
fix: handle url encoded file name in url params for single file servi…
danpiths Jun 17, 2026
c238014
refactor: skills repo ui refactor
impoiler Jun 17, 2026
3052f96
feat: ability to select timezone in date selectors
impoiler Jun 16, 2026
87b35f1
chore: UI dependency updates for npn audit
impoiler Jun 16, 2026
bc1e8b0
feat: add Virtual Key Rankings tab in dashboard
impoiler Jun 16, 2026
fcd444f
fix: do not clear selection on virtual keys table on filter or search
impoiler Jun 16, 2026
99bd3c5
fix: workspace/model pages style fixes
impoiler Jun 16, 2026
abe5786
feat: dashboard export endpoint
impoiler Jun 16, 2026
7bc8bb1
fix: Seconds to minutes UI bug for provider network form
impoiler Jun 16, 2026
bb05be8
feat: allow toggling additional columns in logs and MCP logs tables
impoiler Jun 18, 2026
26ac93d
fix: return 409 for Conflict errors
impoiler Jun 18, 2026
2f96e3a
feat: show inline error for 409 errors
impoiler Jun 18, 2026
ded002a
fix: adds explicit content type header for container delete
sammaji Jun 17, 2026
79c6471
fix: e2e ui tests for providers management
sammaji Jun 18, 2026
ec3d03c
docs: evaluation mode in schemas for guardrails
Jun 12, 2026
021671e
fix: redacts emails from logs and handle wildcard provider in vk
sammaji Jun 18, 2026
5dee81f
chore: rename migration folder to migration-cli
sammaji Jun 18, 2026
fe688ab
feat: adds npx script for migration cli
sammaji Jun 19, 2026
5c0f07c
feat: adds github action scripts for migration cli
sammaji Jun 19, 2026
62d3865
fix: run governance on cc oauth requests when vk is present
Jun 19, 2026
a9e5ebf
fix: run governance on cc oauth requests when vk is present (#4557)
akshaydeo Jun 19, 2026
a3bbb4d
fix: double message start event in anthropic stream closes #4556
Jun 19, 2026
a014020
fix: double message start event in anthropic stream closes #4556 (#4559)
akshaydeo Jun 19, 2026
2ebd0ab
fix: e2e ui tests for model limts
sammaji Jun 18, 2026
bd8e1d7
fix: e2e ui tests for mcp registry
sammaji Jun 19, 2026
65fa2a2
fix: remove skip key selection check from governance pre llm hook
Jun 19, 2026
869c9c9
fix: remove skip key selection check from governance pre llm hook (#4…
akshaydeo Jun 19, 2026
971d4c6
docs: evaluation mode in schemas for guardrails (#4337)
akshaydeo Jun 19, 2026
374d6f7
chore: adds docs for litellm-to-bifrost migration script
sammaji Jun 17, 2026
c57f93e
fix: redacts emails from logs and handle wildcard provider in vk (#4550)
akshaydeo Jun 19, 2026
ce3a238
chore: adds docs for litellm-to-bifrost migration script (#4488)
akshaydeo Jun 19, 2026
e213546
chore: rename migration folder to migration-cli (#4551)
akshaydeo Jun 19, 2026
113f854
feat: adds npx script for migration cli (#4552)
akshaydeo Jun 19, 2026
cf58ea4
feat: adds github action scripts for migration cli (#4553)
akshaydeo Jun 19, 2026
6060b08
feat: adds business unit & user names & ids to tracing
roroghost17 Jun 19, 2026
5e7460b
feat: adds business unit & user names & ids to tracing (#4562)
akshaydeo Jun 19, 2026
8df5809
fix: adds explicit content type header for container delete (#4490)
akshaydeo Jun 19, 2026
fcb3939
fix: e2e ui tests for providers management (#4517)
akshaydeo Jun 19, 2026
dc7206e
fix: e2e ui tests for model limts (#4519)
akshaydeo Jun 19, 2026
e6b5301
fix: e2e ui tests for mcp registry (#4558)
akshaydeo Jun 19, 2026
24fe11f
add vkey cost compute test cases (#4561)
akshaydeo Jun 19, 2026
2cd95b5
dependabot fixes (#4570)
akshaydeo Jun 20, 2026
1dbcefc
version cut (#4571)
akshaydeo Jun 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/helm-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ jobs:
cd helm-charts
gh release create "helm-chart-v${{ steps.chart-version.outputs.version }}" \
bifrost-${{ steps.chart-version.outputs.version }}.tgz \
--target ${{ github.sha }} \
--title "Helm Chart v${{ steps.chart-version.outputs.version }}" \
--notes "Helm chart release for Bifrost v${{ steps.chart-version.outputs.version }}"
env:
Expand Down
120 changes: 120 additions & 0 deletions .github/workflows/release-bifrost-migration-cli.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: Release Migration CLI

on:
push:
branches:
- main

# Prevent concurrent runs
concurrency:
group: release-bifrost-migration-cli
cancel-in-progress: false

permissions:
contents: read

jobs:
check-version:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get-version.outputs.version }}
tag_exists: ${{ steps.check-tag.outputs.exists }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1
with:
egress-policy: block
allowed-endpoints: >
github.com:443

- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
fetch-tags: true
persist-credentials: false

- name: Get version from file
id: get-version
run: echo "version=$(cat scripts/bifrost-migration-cli/version)" >> "$GITHUB_OUTPUT"

- name: Check if tag exists
id: check-tag
env:
VERSION: ${{ steps.get-version.outputs.version }}
run: |
if git rev-parse "bifrost-migration-cli/v${VERSION}" >/dev/null 2>&1; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi

test-bifrost-migration-cli:
needs: [check-version]
if: needs.check-version.outputs.tag_exists == 'false'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1
with:
egress-policy: audit

- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
fetch-tags: true
Comment on lines +64 to +68

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add persist-credentials: false to the checkout step.

The static analysis tool flagged this checkout step for credential persistence. Since this job only needs read access and doesn't perform git operations, explicitly disabling credential persistence reduces the attack surface.

🛡️ Suggested fix
       - name: Checkout repository
         uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
         with:
           fetch-depth: 0
           fetch-tags: true
+          persist-credentials: false
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
fetch-tags: true
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
fetch-tags: true
persist-credentials: false
🧰 Tools
🪛 zizmor (1.25.2)

[warning] 64-68: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release-bifrost-migration-cli.yml around lines 64 - 68,
Add the `persist-credentials: false` parameter to the checkout step that uses
the actions/checkout action to reduce the attack surface. Since this workflow
only requires read access to the repository and does not perform any git write
operations like pushing commits or tags, explicitly disabling credential
persistence is a security best practice. Include this parameter in the `with`
section alongside the existing `fetch-depth` and `fetch-tags` parameters.

Source: Linters/SAST tools


- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version: "1.26.4"

- name: Run bifrost-migration-cli tests
working-directory: scripts/bifrost-migration-cli
env:
GOWORK: "off"
run: go test ./...

release-bifrost-migration-cli:
needs: [check-version, test-bifrost-migration-cli]
if: needs.check-version.outputs.tag_exists == 'false'
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
success: ${{ steps.release.outputs.success }}
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1
with:
egress-policy: audit

- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
fetch-tags: true
token: ${{ secrets.GH_TOKEN }}

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version: "1.26.4"

- name: Configure Git
run: |
git config user.name "GitHub Actions Bot"
git config user.email "github-actions[bot]@users.noreply.github.com"

- name: Release Migration CLI
id: release
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }}
R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
R2_BUCKET: ${{ secrets.R2_BUCKET }}
run: ./.github/workflows/scripts/release-bifrost-migration-cli.sh "${{ needs.check-version.outputs.version }}"
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
set -euo pipefail

# Cross-compile bifrost-migration-cli binaries for multiple platforms
# Usage: ./build-bifrost-migration-cli-executables.sh <version>

if [[ -z "${1:-}" ]]; then
echo "Usage: $0 <version>" >&2
exit 1
fi
VERSION="$1"

echo "🔨 Building bifrost-migration-cli executables with version: $VERSION"

# Get the script directory and project root
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"

# Clean and create dist directory
rm -rf "$PROJECT_ROOT/dist"
mkdir -p "$PROJECT_ROOT/dist"

# Define platforms
platforms=(
"darwin/amd64"
"darwin/arm64"
"linux/amd64"
"linux/arm64"
"windows/amd64"
)

MODULE_PATH="$PROJECT_ROOT/scripts/bifrost-migration-cli"
COMMIT="${GITHUB_SHA:-$(git rev-parse HEAD 2>/dev/null || echo 'unknown')}"

for platform in "${platforms[@]}"; do
IFS='/' read -r GOOS GOARCH <<< "$platform"

output_name="bifrost-migration-cli"
[[ "$GOOS" = "windows" ]] && output_name+='.exe'

echo "Building bifrost-migration-cli for $GOOS/$GOARCH..."
mkdir -p "$PROJECT_ROOT/dist/$GOOS/$GOARCH"

cd "$MODULE_PATH"

# bifrost-migration-cli has no CGO dependencies, so we can cross-compile without cross-compilers
env GOWORK=off CGO_ENABLED=0 GOOS="$GOOS" GOARCH="$GOARCH" \
go build -trimpath \
-ldflags "-s -w -buildid= -X main.version=v${VERSION} -X main.commit=${COMMIT}" \
-o "$PROJECT_ROOT/dist/$GOOS/$GOARCH/$output_name" .

# Generate SHA-256 checksum for the binary
(cd "$PROJECT_ROOT/dist/$GOOS/$GOARCH" && shasum -a 256 "$output_name" > "$output_name.sha256")
echo " → checksum: $(cat "$PROJECT_ROOT/dist/$GOOS/$GOARCH/$output_name.sha256")"

cd "$PROJECT_ROOT"
done

echo "✅ All bifrost-migration-cli binaries built successfully"
143 changes: 143 additions & 0 deletions .github/workflows/scripts/release-bifrost-migration-cli.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
#!/usr/bin/env bash
set -euo pipefail

# Release bifrost-migration-cli component
# Usage: ./release-bifrost-migration-cli.sh <version>

# Get the absolute path of the script directory
if command -v readlink >/dev/null 2>&1 && readlink -f "$0" >/dev/null 2>&1; then
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
else
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
fi
REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd -P)"

# Validate input argument
if [ "${1:-}" = "" ]; then
echo "Usage: $0 <version>" >&2
exit 1
fi

VERSION="$1"
TAG_NAME="bifrost-migration-cli/v${VERSION}"

echo "🚀 Releasing bifrost-migration-cli v$VERSION..."

# Validate bifrost-migration-cli build
echo "🔨 Validating bifrost-migration-cli build..."
COMMIT="${GITHUB_SHA:-$(git rev-parse HEAD 2>/dev/null || echo 'unknown')}"
(cd "$REPO_ROOT/scripts/bifrost-migration-cli" && GOWORK=off go build -ldflags "-X main.version=v${VERSION} -X main.commit=${COMMIT}" ./...)
echo "✅ bifrost-migration-cli build validation successful"

# Build bifrost-migration-cli executables
echo "🔨 Building executables..."
bash "$SCRIPT_DIR/build-bifrost-migration-cli-executables.sh" "$VERSION"

# --- Preflight checks (no side effects) ---

# Capturing changelog
CHANGELOG_BODY=$(cat "$REPO_ROOT/scripts/bifrost-migration-cli/changelog.md")
# Skip comments from changelog
CHANGELOG_BODY=$(printf '%s\n' "$CHANGELOG_BODY" | sed '/<!--/,/-->/d')
# If changelog is empty, return error
if [ -z "$CHANGELOG_BODY" ]; then
echo "❌ Changelog is empty"
exit 1
fi
echo "📝 New changelog: $CHANGELOG_BODY"

# Finding previous tag
echo "🔍 Finding previous tag..."
TAG_COUNT=$(git tag -l "bifrost-migration-cli/v*" | wc -l | tr -d ' ')
if [[ "$TAG_COUNT" -eq 0 ]]; then
PREV_TAG=""
else
PREV_TAG=$(git tag -l "bifrost-migration-cli/v*" | sort -V | tail -1)
if [[ "$PREV_TAG" == "$TAG_NAME" ]]; then
PREV_TAG=$(git tag -l "bifrost-migration-cli/v*" | sort -V | tail -2 | head -1)
[[ "$PREV_TAG" == "$TAG_NAME" ]] && PREV_TAG=""
fi
fi
echo "🔍 Previous tag: $PREV_TAG"

# Get message of the tag and compare changelogs
if [[ -n "$PREV_TAG" ]]; then
echo "🔍 Getting previous tag message..."
PREV_CHANGELOG=$(git tag -l --format='%(contents:body)' "$PREV_TAG")
echo "📝 Previous changelog body: $PREV_CHANGELOG"

# Checking if tag message is the same as the changelog
if [[ "$PREV_CHANGELOG" == "$CHANGELOG_BODY" ]]; then
echo "❌ Changelog is the same as the previous changelog"
exit 1
fi
else
echo "ℹ️ No previous bifrost-migration-cli tag found. Skipping changelog comparison."
fi

# Verify GitHub token before any publish steps
if [ -z "${GH_TOKEN:-}" ] && [ -z "${GITHUB_TOKEN:-}" ]; then
echo "Error: GH_TOKEN or GITHUB_TOKEN is not set. Please export one to authenticate the GitHub CLI."
exit 1
fi

# --- Publish steps (all checks passed) ---

# Configure and upload to R2
echo "📤 Uploading binaries..."
bash "$SCRIPT_DIR/configure-r2.sh"
bash "$SCRIPT_DIR/upload-bifrost-migration-cli-to-r2.sh" "$TAG_NAME"

# Create and push tag
if git rev-parse -q --verify "refs/tags/$TAG_NAME" >/dev/null; then
echo "ℹ️ Tag $TAG_NAME already exists. Reusing it."
else
echo "🏷️ Creating tag: $TAG_NAME"
git tag "$TAG_NAME" -m "Release bifrost-migration-cli v$VERSION" -m "$CHANGELOG_BODY"
git push origin "$TAG_NAME"
fi
Comment on lines +92 to +98

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Check remote tag existence before skipping push.

At Line 92, the script only checks local refs. A local-only tag can skip git push, which makes the publish path non-idempotent and can break or mis-target release creation.

🔧 Suggested fix
-if git rev-parse -q --verify "refs/tags/$TAG_NAME" >/dev/null; then
-  echo "ℹ️ Tag $TAG_NAME already exists. Reusing it."
-else
-  echo "🏷️ Creating tag: $TAG_NAME"
-  git tag "$TAG_NAME" -m "Release bifrost-migration-cli v$VERSION" -m "$CHANGELOG_BODY"
-  git push origin "$TAG_NAME"
-fi
+if git ls-remote --exit-code --tags origin "refs/tags/$TAG_NAME" >/dev/null 2>&1; then
+  echo "ℹ️ Remote tag $TAG_NAME already exists. Reusing it."
+else
+  if git rev-parse -q --verify "refs/tags/$TAG_NAME" >/dev/null; then
+    echo "ℹ️ Local tag $TAG_NAME exists; pushing to origin."
+  else
+    echo "🏷️ Creating tag: $TAG_NAME"
+    git tag "$TAG_NAME" -m "Release bifrost-migration-cli v$VERSION" -m "$CHANGELOG_BODY"
+  fi
+  git push origin "refs/tags/$TAG_NAME"
+fi
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/scripts/release-bifrost-migration-cli.sh around lines 92 -
98, The tag existence check in the conditional block only verifies local refs
using git rev-parse, which means a tag could exist locally but not be pushed to
the remote, causing the push to be skipped and making the process
non-idempotent. Modify the tag existence check to verify that the tag exists on
the remote repository using git ls-remote to check the origin remote before
deciding to skip the tag creation and push operations, ensuring consistency
between local and remote state.


# Create GitHub release
TITLE="Bifrost Migration CLI v$VERSION"

# Mark prereleases when version contains a hyphen
PRERELEASE_FLAG=""
if [[ "$VERSION" == *-* ]]; then
PRERELEASE_FLAG="--prerelease"
fi

BODY="## Bifrost Migration CLI Release v$VERSION

$CHANGELOG_BODY

### Installation

#### Binary Download
\`\`\`bash
npx @maximhq/bifrost-migration-cli --cli-version v$VERSION
\`\`\`

---
_This release was automatically created._"

if gh release view "$TAG_NAME" >/dev/null 2>&1; then
echo "ℹ️ GitHub release $TAG_NAME already exists. Skipping."
else
echo "🎉 Creating GitHub release for $TITLE..."
gh release create "$TAG_NAME" \
--title "$TITLE" \
--notes "$BODY" \
${PRERELEASE_FLAG}
fi

echo "✅ Bifrost Migration CLI released successfully"

# Print summary
echo ""
echo "📋 Release Summary:"
echo " 🏷️ Tag: $TAG_NAME"
echo " 🎉 GitHub release: Created"

if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
echo "success=true" >> "$GITHUB_OUTPUT"
fi
Loading
Loading