Skip to content

Publish Canary (Benchmark) #3

Publish Canary (Benchmark)

Publish Canary (Benchmark) #3

name: Publish Canary (Benchmark)
on:
# 手动触发
workflow_dispatch:
inputs:
skip_tests:
description: 'Skip tests (useful during test refactoring)'
type: boolean
default: false
required: false
jobs:
publish-canary:
name: Publish Canary to npm
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: bun install
- name: Generate canary version
id: version
run: |
# 生成 canary 版本号
BASE_VERSION=$(node -p "require('./packages/core/package.json').version.split('-')[0]")
TIMESTAMP=$(date -u +%Y%m%d%H%M)
CANARY_VERSION="${BASE_VERSION}-canary.${TIMESTAMP}"
echo "version=$CANARY_VERSION" >> $GITHUB_OUTPUT
echo "📦 Generated canary version: $CANARY_VERSION"
- name: Update package versions
run: |
VERSION="${{ steps.version.outputs.version }}"
# 使用 node 直接修改 package.json,避免 npm version 的 workspace 问题
node -e "
const fs = require('fs');
const path = require('path');
// 更新 SDK 版本
const corePath = 'packages/core/package.json';
const corePkg = JSON.parse(fs.readFileSync(corePath, 'utf-8'));
corePkg.version = process.env.VERSION;
fs.writeFileSync(corePath, JSON.stringify(corePkg, null, 2) + '\n');
console.log('✅ Updated core version to', process.env.VERSION);
// 更新 CLI 版本和依赖
const cliPath = 'packages/cli/package.json';
const cliPkg = JSON.parse(fs.readFileSync(cliPath, 'utf-8'));
cliPkg.version = process.env.VERSION;
cliPkg.dependencies['open-agent-sdk'] = process.env.VERSION;
fs.writeFileSync(cliPath, JSON.stringify(cliPkg, null, 2) + '\n');
console.log('✅ Updated cli version to', process.env.VERSION);
console.log('✅ Updated cli dependency to open-agent-sdk@' + process.env.VERSION);
"
env:
VERSION: ${{ steps.version.outputs.version }}
- name: Run tests
if: ${{ !inputs.skip_tests }}
run: |
echo "🧪 Running tests..."
cd packages/core
bun test
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
- name: Skip tests (warning)
if: ${{ inputs.skip_tests }}
run: |
echo "⚠️ Skipping tests as requested"
- name: Build SDK
run: |
echo "🔨 Building SDK..."
cd packages/core
bun run build
- name: Publish SDK to npm
run: |
echo "📤 Publishing open-agent-sdk@${{ steps.version.outputs.version }}..."
cd packages/core
npm publish --access public --tag canary
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Wait for npm registry
run: |
VERSION="${{ steps.version.outputs.version }}"
echo "⏳ Waiting for npm to index open-agent-sdk@$VERSION..."
for i in {1..20}; do
if npm view open-agent-sdk@$VERSION version 2>/dev/null; then
echo "✅ Package is available on npm"
exit 0
fi
echo "Attempt $i/20: waiting 10 seconds..."
sleep 10
done
echo "⚠️ Timeout waiting for npm, but continuing..."
- name: Publish CLI to npm
run: |
echo "📤 Publishing @open-agent-sdk/cli@${{ steps.version.outputs.version }}..."
cd packages/cli
npm publish --access public --tag canary
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Summary
run: |
VERSION="${{ steps.version.outputs.version }}"
echo "## 🎉 Canary Published!" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📦 Published Packages" >> $GITHUB_STEP_SUMMARY
echo "- \`open-agent-sdk@$VERSION\`" >> $GITHUB_STEP_SUMMARY
echo "- \`@open-agent-sdk/cli@$VERSION\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 🚀 Install on Daytona" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
echo "npm install -g @open-agent-sdk/cli@$VERSION" >> $GITHUB_STEP_SUMMARY
echo "# Or install latest canary:" >> $GITHUB_STEP_SUMMARY
echo "npm install -g @open-agent-sdk/cli@canary" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📋 Next Steps" >> $GITHUB_STEP_SUMMARY
echo "1. Wait 1-2 minutes for full npm indexing" >> $GITHUB_STEP_SUMMARY
echo "2. Install on Daytona using the command above" >> $GITHUB_STEP_SUMMARY
echo "3. Run your benchmark tests" >> $GITHUB_STEP_SUMMARY