ci: allow targeted live model providers

This commit is contained in:
Peter Steinberger
2026-04-27 04:04:35 +01:00
parent cbbd860ef9
commit e0141946b2

View File

@@ -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 }}