Skip to content

Commit 597f4e2

Browse files
committed
ci: add auto pr
1 parent cfc8cf3 commit 597f4e2

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
name: Auto Refresh Dist
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
providers:
7+
description: 'Comma-separated list of providers to fetch (empty for all)'
8+
required: false
9+
default: ''
10+
type: string
11+
schedule:
12+
- cron: '0 4 * * *'
13+
14+
jobs:
15+
refresh-dist:
16+
runs-on: ubuntu-latest
17+
permissions:
18+
contents: write
19+
env:
20+
NODE_ENV: production
21+
PROVIDERS_INPUT: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.providers || '' }}
22+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
23+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
24+
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
25+
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
with:
30+
fetch-depth: 0
31+
32+
- name: Setup Node.js
33+
uses: actions/setup-node@v4
34+
with:
35+
node-version: '22.13.1'
36+
37+
- name: Setup pnpm
38+
uses: pnpm/action-setup@v2
39+
with:
40+
version: 10.12.1
41+
42+
- name: Cache pnpm dependencies
43+
uses: actions/cache@v4
44+
with:
45+
path: |
46+
~/.pnpm-store
47+
node_modules/
48+
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
49+
restore-keys: |
50+
${{ runner.os }}-pnpm-
51+
52+
- name: Install dependencies
53+
run: pnpm install --frozen-lockfile
54+
55+
- name: Build project
56+
run: pnpm build
57+
58+
- name: Ensure dist directory
59+
run: mkdir -p dist
60+
61+
- name: Fetch provider data
62+
run: |
63+
set -euo pipefail
64+
echo "Provider filter: '${PROVIDERS_INPUT}'"
65+
if [ -n "$PROVIDERS_INPUT" ]; then
66+
node build/cli.js fetch-providers -p "$PROVIDERS_INPUT" -o dist
67+
else
68+
node build/cli.js fetch-all -o dist
69+
fi
70+
env:
71+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
72+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
73+
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
74+
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
75+
76+
- name: Validate generated JSON files
77+
run: |
78+
set -e
79+
echo "Validating JSON files..."
80+
for file in dist/*.json; do
81+
if [ -f "$file" ]; then
82+
echo "Validating $file"
83+
jq empty "$file" || (echo "Invalid JSON in $file" && exit 1)
84+
fi
85+
done
86+
87+
- name: List generated files
88+
run: |
89+
echo "Dist contents:"
90+
ls -lah dist
91+
echo "File sizes:"
92+
du -h dist/*.json
93+
94+
- name: Summarize fetched models
95+
id: stats
96+
run: |
97+
if [ -f dist/all.json ]; then
98+
TOTAL_MODELS=$(jq -r '.totalModels // 0' dist/all.json)
99+
PROVIDERS=$(jq -r '.providers | keys | join(", ")' dist/all.json)
100+
PROVIDER_COUNT=$(jq -r '.providers | keys | length' dist/all.json)
101+
else
102+
TOTAL_MODELS=0
103+
PROVIDERS=none
104+
PROVIDER_COUNT=0
105+
fi
106+
echo "total_models=$TOTAL_MODELS" >> $GITHUB_OUTPUT
107+
echo "providers=$PROVIDERS" >> $GITHUB_OUTPUT
108+
echo "provider_count=$PROVIDER_COUNT" >> $GITHUB_OUTPUT
109+
echo "timestamp=$(date -u '+%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_OUTPUT
110+
echo "date_short=$(date -u '+%Y%m%d')" >> $GITHUB_OUTPUT
111+
112+
- name: Configure Git author
113+
run: |
114+
git config user.name "github-actions[bot]"
115+
git config user.email "github-actions[bot]@users.noreply.github.com"
116+
117+
- name: Detect dist updates
118+
id: detect_changes
119+
run: |
120+
git status -sb
121+
if git diff --quiet HEAD -- dist; then
122+
echo "dist_changed=false" >> $GITHUB_OUTPUT
123+
else
124+
echo "dist_changed=true" >> $GITHUB_OUTPUT
125+
fi
126+
127+
- name: Create pull request
128+
if: steps.detect_changes.outputs.dist_changed == 'true'
129+
uses: peter-evans/create-pull-request@v6
130+
with:
131+
token: ${{ secrets.GITHUB_TOKEN }}
132+
commit-message: chore: refresh dist data
133+
branch: auto/update-dist-${{ github.run_id }}
134+
base: dev
135+
title: chore: refresh dist data
136+
body: |
137+
## Summary
138+
- Automated refresh of the provider JSON data in `dist/`
139+
- Total models: ${{ steps.stats.outputs.total_models }} across ${{ steps.stats.outputs.provider_count }} providers
140+
- Providers: ${{ steps.stats.outputs.providers }}
141+
- Trigger: `${{ github.event_name }}`
142+
- Timestamp: ${{ steps.stats.outputs.timestamp }}
143+
labels: automated
144+
delete-branch: true
145+
146+
- name: Upload dist artifacts
147+
uses: actions/upload-artifact@v4
148+
with:
149+
name: provider-configs-${{ steps.stats.outputs.date_short }}
150+
path: dist/*.json
151+
retention-days: 30

0 commit comments

Comments
 (0)