mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 07:40:44 +00:00
ci: allow targeted live model providers
This commit is contained in:
@@ -38,6 +38,11 @@ on:
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
live_model_providers:
|
||||
description: Comma/space separated provider ids for the Docker live model matrix; blank runs all providers
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
workflow_call:
|
||||
inputs:
|
||||
ref:
|
||||
@@ -74,6 +79,11 @@ on:
|
||||
required: false
|
||||
default: false
|
||||
type: boolean
|
||||
live_model_providers:
|
||||
description: Comma/space separated provider ids for the Docker live model matrix; blank runs all providers
|
||||
required: false
|
||||
default: ""
|
||||
type: string
|
||||
secrets:
|
||||
OPENAI_API_KEY:
|
||||
required: false
|
||||
@@ -180,6 +190,7 @@ jobs:
|
||||
outputs:
|
||||
selected_sha: ${{ steps.validate.outputs.selected_sha }}
|
||||
trusted_reason: ${{ steps.validate.outputs.trusted_reason }}
|
||||
live_model_matrix: ${{ steps.live_model_matrix.outputs.matrix }}
|
||||
steps:
|
||||
- name: Checkout selected ref
|
||||
uses: actions/checkout@v6
|
||||
@@ -224,6 +235,89 @@ jobs:
|
||||
echo "Trust reason: \`$trusted_reason\`"
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
- name: Resolve live model provider matrix
|
||||
id: live_model_matrix
|
||||
env:
|
||||
INPUT_LIVE_MODEL_PROVIDERS: ${{ inputs.live_model_providers }}
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
all_providers=(anthropic google minimax openai opencode-go openrouter xai zai fireworks)
|
||||
|
||||
provider_label() {
|
||||
case "$1" in
|
||||
anthropic) echo "Anthropic" ;;
|
||||
google) echo "Google" ;;
|
||||
minimax) echo "MiniMax" ;;
|
||||
openai) echo "OpenAI" ;;
|
||||
opencode-go) echo "OpenCode" ;;
|
||||
openrouter) echo "OpenRouter" ;;
|
||||
xai) echo "xAI" ;;
|
||||
zai) echo "Z.ai" ;;
|
||||
fireworks) echo "Fireworks" ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
normalize_provider() {
|
||||
local value="${1,,}"
|
||||
case "$value" in
|
||||
z.ai|z-ai) echo "zai" ;;
|
||||
opencode|opencode-go) echo "opencode-go" ;;
|
||||
open-router|openrouter) echo "openrouter" ;;
|
||||
*) echo "$value" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
is_known_provider() {
|
||||
local value="$1"
|
||||
local provider
|
||||
for provider in "${all_providers[@]}"; do
|
||||
[[ "$provider" == "$value" ]] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
selected=()
|
||||
declare -A seen=()
|
||||
raw="${INPUT_LIVE_MODEL_PROVIDERS:-}"
|
||||
normalized_all="${raw,,}"
|
||||
normalized_all="${normalized_all//[[:space:],]/}"
|
||||
if [[ -z "$normalized_all" || "$normalized_all" == "all" ]]; then
|
||||
selected=("${all_providers[@]}")
|
||||
else
|
||||
while IFS= read -r entry; do
|
||||
[[ -z "$entry" ]] && continue
|
||||
provider="$(normalize_provider "$entry")"
|
||||
if ! is_known_provider "$provider"; then
|
||||
echo "Unknown live model provider '${entry}'. Expected one of: ${all_providers[*]}" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "${seen[$provider]:-}" ]]; then
|
||||
selected+=("$provider")
|
||||
seen[$provider]=1
|
||||
fi
|
||||
done < <(printf '%s\n' "$raw" | tr ',' '\n' | tr '[:space:]' '\n')
|
||||
fi
|
||||
|
||||
if [[ "${#selected[@]}" -eq 0 ]]; then
|
||||
echo "No live model providers selected." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
matrix_entries="[]"
|
||||
for provider in "${selected[@]}"; do
|
||||
label="$(provider_label "$provider")"
|
||||
matrix_entries="$(jq -c --arg label "$label" --arg provider "$provider" '. + [{provider_label: $label, providers: $provider}]' <<<"$matrix_entries")"
|
||||
done
|
||||
matrix="$(jq -c --argjson include "$matrix_entries" '{include: $include}')"
|
||||
echo "matrix=$matrix" >> "$GITHUB_OUTPUT"
|
||||
{
|
||||
echo
|
||||
echo "Live model providers: \`$(IFS=,; echo "${selected[*]}")\`"
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
validate_release_live_cache:
|
||||
needs: validate_selected_ref
|
||||
if: inputs.include_live_suites && !inputs.live_models_only
|
||||
@@ -842,26 +936,7 @@ jobs:
|
||||
timeout-minutes: 75
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- provider_label: Anthropic
|
||||
providers: anthropic
|
||||
- provider_label: Google
|
||||
providers: google
|
||||
- provider_label: MiniMax
|
||||
providers: minimax
|
||||
- provider_label: OpenAI
|
||||
providers: openai
|
||||
- provider_label: OpenCode
|
||||
providers: opencode-go
|
||||
- provider_label: OpenRouter
|
||||
providers: openrouter
|
||||
- provider_label: xAI
|
||||
providers: xai
|
||||
- provider_label: Z.ai
|
||||
providers: zai
|
||||
- provider_label: Fireworks
|
||||
providers: fireworks
|
||||
matrix: ${{ fromJSON(needs.validate_selected_ref.outputs.live_model_matrix) }}
|
||||
env:
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
|
||||
|
||||
Reference in New Issue
Block a user