-
Notifications
You must be signed in to change notification settings - Fork 6
202 lines (168 loc) · 8.09 KB
/
Copy pathcheck-versions.yml
File metadata and controls
202 lines (168 loc) · 8.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
name: Check for Updates
on:
schedule:
# Run daily at 2 AM UTC
- cron: '0 2 * * *'
workflow_dispatch:
inputs:
force_update:
description: 'Force update even if versions match'
type: boolean
default: false
permissions:
contents: write
pull-requests: write
jobs:
check-versions:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Check latest versions
id: check
run: |
set -euo pipefail
# --- Read current versions from versions.json ---
CURRENT_CLI=$(jq -r '."claude-code-cli"' versions.json)
CURRENT_SDK=$(jq -r '."claude-agent-sdk-cli"' versions.json)
CURRENT_PYTHON=$(jq -r '."claude-agent-sdk-python"' versions.json)
echo "Current Claude Code CLI: $CURRENT_CLI"
echo "Current Claude Agent SDK: $CURRENT_SDK"
echo "Current Python SDK: $CURRENT_PYTHON"
# --- Fetch latest versions from registries ---
LATEST_CLI=$(curl -sf https://registry.npmjs.org/@anthropic-ai/claude-code/latest | jq -r '.version')
LATEST_SDK=$(curl -sf https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/latest | jq -r '.version')
LATEST_PYTHON=$(curl -sf https://pypi.org/pypi/claude-agent-sdk/json | jq -r '.info.version')
echo "Latest Claude Code CLI: $LATEST_CLI"
echo "Latest Claude Agent SDK: $LATEST_SDK"
echo "Latest Python SDK: $LATEST_PYTHON"
# --- Determine what changed ---
NPM_CHANGED=false
PYTHON_CHANGED=false
if [[ "$CURRENT_CLI" != "$LATEST_CLI" ]] || [[ "$CURRENT_SDK" != "$LATEST_SDK" ]]; then
NPM_CHANGED=true
fi
if [[ "$CURRENT_PYTHON" != "$LATEST_PYTHON" ]]; then
PYTHON_CHANGED=true
fi
# Force flag overrides both
if [[ "${{ github.event.inputs.force_update }}" == "true" ]]; then
NPM_CHANGED=true
PYTHON_CHANGED=true
fi
UPDATE_NEEDED=false
if [[ "$NPM_CHANGED" == "true" ]] || [[ "$PYTHON_CHANGED" == "true" ]]; then
UPDATE_NEEDED=true
fi
echo "npm_changed=$NPM_CHANGED" | tee -a "$GITHUB_OUTPUT"
echo "python_changed=$PYTHON_CHANGED" | tee -a "$GITHUB_OUTPUT"
echo "update_needed=$UPDATE_NEEDED" | tee -a "$GITHUB_OUTPUT"
echo "cli_version=$LATEST_CLI" | tee -a "$GITHUB_OUTPUT"
echo "sdk_version=$LATEST_SDK" | tee -a "$GITHUB_OUTPUT"
echo "python_version=$LATEST_PYTHON" | tee -a "$GITHUB_OUTPUT"
- name: Update versions and Dockerfiles
if: steps.check.outputs.update_needed == 'true'
env:
NPM_CHANGED: ${{ steps.check.outputs.npm_changed }}
PYTHON_CHANGED: ${{ steps.check.outputs.python_changed }}
CLI_VERSION: ${{ steps.check.outputs.cli_version }}
SDK_VERSION: ${{ steps.check.outputs.sdk_version }}
PYTHON_VERSION: ${{ steps.check.outputs.python_version }}
run: |
set -euo pipefail
TODAY=$(date -u +%Y-%m-%d)
# --- Update versions.json with all latest versions + today's date ---
jq --arg cli "$CLI_VERSION" \
--arg sdk "$SDK_VERSION" \
--arg py "$PYTHON_VERSION" \
--arg date "$TODAY" \
'
.["claude-code-cli"] = $cli |
.["claude-agent-sdk-cli"] = $sdk |
.["claude-agent-sdk-python"] = $py |
.last_updated = $date |
.last_check = $date
' versions.json > versions.json.tmp && mv versions.json.tmp versions.json
echo "--- Updated versions.json ---"
cat versions.json
# --- Update Dockerfile comments (only affected files) ---
if [[ "$NPM_CHANGED" == "true" ]]; then
for f in Dockerfile.typescript Dockerfile.alpine; do
echo "Updating $f (npm packages)"
sed -i "s|^# Build Date: .*|# Build Date: $TODAY|" "$f"
sed -i "s|^# Claude Code CLI: @anthropic-ai/claude-code ~v.*|# Claude Code CLI: @anthropic-ai/claude-code ~v${CLI_VERSION}|" "$f"
sed -i "s|^# Claude Agent SDK: @anthropic-ai/claude-agent-sdk ~v.*|# Claude Agent SDK: @anthropic-ai/claude-agent-sdk ~v${SDK_VERSION}|" "$f"
done
fi
if [[ "$PYTHON_CHANGED" == "true" ]]; then
for f in Dockerfile Dockerfile.alpine-python; do
echo "Updating $f (python package)"
sed -i "s|^# Build Date: .*|# Build Date: $TODAY|" "$f"
sed -i "s|^# Python SDK: claude-agent-sdk ~v.*|# Python SDK: claude-agent-sdk ~v${PYTHON_VERSION}|" "$f"
done
fi
- name: Create pull request
if: steps.check.outputs.update_needed == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_CHANGED: ${{ steps.check.outputs.npm_changed }}
PYTHON_CHANGED: ${{ steps.check.outputs.python_changed }}
CLI_VERSION: ${{ steps.check.outputs.cli_version }}
SDK_VERSION: ${{ steps.check.outputs.sdk_version }}
PYTHON_VERSION: ${{ steps.check.outputs.python_version }}
run: |
set -euo pipefail
TODAY=$(date -u +%Y-%m-%d)
BRANCH="auto-update/sdk-${TODAY}"
# --- Configure git identity ---
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
# --- Delete remote branch if it already exists (same-day re-runs) ---
git push origin --delete "$BRANCH" 2>/dev/null || true
# --- Create branch and commit ---
git checkout -b "$BRANCH"
git add versions.json Dockerfile*
# Build a meaningful commit message
COMMIT_LINES="chore: update SDK versions ($TODAY)"
COMMIT_LINES+=$'\n'
if [[ "$NPM_CHANGED" == "true" ]]; then
COMMIT_LINES+=$'\n'"- Claude Code CLI: v${CLI_VERSION}"
COMMIT_LINES+=$'\n'"- Claude Agent SDK: v${SDK_VERSION}"
fi
if [[ "$PYTHON_CHANGED" == "true" ]]; then
COMMIT_LINES+=$'\n'"- Python SDK: v${PYTHON_VERSION}"
fi
git commit -m "$COMMIT_LINES"
git push -u origin "$BRANCH"
# --- Build PR body ---
BODY="## Automated SDK Version Update"
BODY+=$'\n\n'"**Date:** ${TODAY}"
BODY+=$'\n\n'"### Changes"
if [[ "$NPM_CHANGED" == "true" ]]; then
BODY+=$'\n'"- Claude Code CLI updated to v${CLI_VERSION}"
BODY+=$'\n'"- Claude Agent SDK updated to v${SDK_VERSION}"
BODY+=$'\n'"- Updated Dockerfile.typescript and Dockerfile.alpine"
fi
if [[ "$PYTHON_CHANGED" == "true" ]]; then
BODY+=$'\n'"- Python SDK updated to v${PYTHON_VERSION}"
BODY+=$'\n'"- Updated Dockerfile and Dockerfile.alpine-python"
fi
BODY+=$'\n\n'"### Automated actions"
BODY+=$'\n'"- Updated \`versions.json\` with latest versions"
BODY+=$'\n'"- Updated version comments in affected Dockerfiles"
BODY+=$'\n'"- Container images will be rebuilt automatically upon merge"
# --- Ensure labels exist ---
gh label create "dependencies" --description "Dependency version updates" --color "0366d6" 2>/dev/null || true
gh label create "automated" --description "Automated pull requests" --color "ededed" 2>/dev/null || true
# --- Create PR ---
PR_URL=$(gh pr create \
--title "chore: update SDK versions (${TODAY})" \
--body "$BODY" \
--label "dependencies,automated" \
--base main)
echo "Created PR: $PR_URL"
# --- Enable auto-merge ---
gh pr merge --auto --squash "$PR_URL"
echo "Auto-merge enabled for $PR_URL"