






















@@ -0,0 +1,109 @@
1+name: Crabbox Hydrate
2+3+on:
4+workflow_dispatch:
5+inputs:
6+crabbox_id:
7+description: "Crabbox lease ID"
8+required: true
9+type: string
10+crabbox_runner_label:
11+description: "Dynamic Crabbox runner label"
12+required: true
13+type: string
14+crabbox_keep_alive_minutes:
15+description: "Minutes to keep the hydrated job alive"
16+required: false
17+default: "90"
18+type: string
19+20+permissions:
21+contents: read
22+23+env:
24+FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
25+26+jobs:
27+hydrate:
28+name: hydrate
29+runs-on: [self-hosted, "${{ inputs.crabbox_runner_label }}"]
30+timeout-minutes: 120
31+steps:
32+ - uses: actions/checkout@v6
33+34+ - name: Setup Node environment
35+uses: ./.github/actions/setup-node-env
36+with:
37+install-bun: "false"
38+39+ - name: Prepare Crabbox shell
40+shell: bash
41+run: |
42+ set -euo pipefail
43+44+ git fetch --no-tags --depth=50 origin "+refs/heads/main:refs/remotes/origin/main"
45+46+ node_bin="$(dirname "$(node -p 'process.execPath')")"
47+ pnpm_bin="$(command -v pnpm)"
48+ sudo ln -sf "$node_bin/node" /usr/local/bin/node
49+ sudo ln -sf "$node_bin/npm" /usr/local/bin/npm
50+ sudo ln -sf "$node_bin/npx" /usr/local/bin/npx
51+ sudo ln -sf "$node_bin/corepack" /usr/local/bin/corepack
52+ sudo ln -sf "$pnpm_bin" /usr/local/bin/pnpm
53+54+ - name: Hydrate provider env helper
55+shell: bash
56+env:
57+ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
58+ANTHROPIC_API_KEY_OLD: ${{ secrets.ANTHROPIC_API_KEY_OLD }}
59+ANTHROPIC_API_TOKEN: ${{ secrets.ANTHROPIC_API_TOKEN }}
60+CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
61+DEEPINFRA_API_KEY: ${{ secrets.DEEPINFRA_API_KEY }}
62+FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
63+GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
64+GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
65+GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
66+KIMI_API_KEY: ${{ secrets.KIMI_API_KEY }}
67+MINIMAX_API_KEY: ${{ secrets.MINIMAX_API_KEY }}
68+MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
69+MOONSHOT_API_KEY: ${{ secrets.MOONSHOT_API_KEY }}
70+OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
71+OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
72+OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
73+QWEN_API_KEY: ${{ secrets.QWEN_API_KEY }}
74+TOGETHER_API_KEY: ${{ secrets.TOGETHER_API_KEY }}
75+XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
76+ZAI_API_KEY: ${{ secrets.ZAI_API_KEY }}
77+Z_AI_API_KEY: ${{ secrets.Z_AI_API_KEY }}
78+run: bash scripts/ci-hydrate-testbox-env.sh
79+80+ - name: Mark Crabbox ready
81+shell: bash
82+run: |
83+ set -euo pipefail
84+ mkdir -p "$HOME/.crabbox/actions"
85+ state="$HOME/.crabbox/actions/${{ inputs.crabbox_id }}.env"
86+ tmp="${state}.tmp"
87+ {
88+ echo "WORKSPACE=${GITHUB_WORKSPACE}"
89+ echo "RUN_ID=${GITHUB_RUN_ID}"
90+ echo "READY_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
91+ } > "$tmp"
92+ mv "$tmp" "$state"
93+94+ - name: Keep Crabbox job alive
95+shell: bash
96+run: |
97+ set -euo pipefail
98+ minutes="${{ inputs.crabbox_keep_alive_minutes }}"
99+ case "$minutes" in
100+ ''|*[!0-9]*) minutes=90 ;;
101+ esac
102+ stop="$HOME/.crabbox/actions/${{ inputs.crabbox_id }}.stop"
103+ deadline=$(( $(date +%s) + minutes * 60 ))
104+ while [ "$(date +%s)" -lt "$deadline" ]; do
105+ if [ -f "$stop" ]; then
106+ exit 0
107+ fi
108+ sleep 15
109+ done
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。