-
Notifications
You must be signed in to change notification settings - Fork 0
88 lines (71 loc) · 3.38 KB
/
check-opencode-updates.yml
File metadata and controls
88 lines (71 loc) · 3.38 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
name: Check for OpenCode Desktop updates
on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Check for latest release and update flake
run: |
CURRENT_VERSION=$(grep 'version = "' flake.nix | head -1 | sed 's/.*version = "\(.*\)".*/\1/')
echo "Current version: $CURRENT_VERSION"
LATEST_RELEASE=$(curl -s https://api.github.com/repos/anomalyco/opencode/releases/latest)
LATEST_VERSION=$(echo "$LATEST_RELEASE" | grep '"tag_name":' | sed 's/.*"tag_name": "v\(.*\)".*/\1/')
echo "Latest version: $LATEST_VERSION"
if [ "$LATEST_VERSION" = "$CURRENT_VERSION" ]; then
echo "No update needed ($CURRENT_VERSION is up to date)"
exit 0
fi
echo "Update needed: $CURRENT_VERSION -> $LATEST_VERSION"
hex_to_sri() {
echo "$1" | xxd -r -p | base64 -w0 | awk '{print "sha256-" $0}'
}
extract_digest() {
local asset_name="$1"
local digest
digest=$(echo "$LATEST_RELEASE" | python3 -c "
import json, sys
data = json.load(sys.stdin)
for a in data['assets']:
if a['name'] == '$asset_name':
print(a['digest'].replace('sha256:', ''))
break
")
hex_to_sri "$digest"
}
HASH_AMD64=$(extract_digest "opencode-desktop-linux-amd64.deb")
HASH_ARM64=$(extract_digest "opencode-desktop-linux-arm64.deb")
HASH_DARWIN_AARCH64=$(extract_digest "opencode-desktop-darwin-aarch64.app.tar.gz")
HASH_DARWIN_X64=$(extract_digest "opencode-desktop-darwin-x64.app.tar.gz")
echo "Computed hashes:"
echo " x86_64-linux: $HASH_AMD64"
echo " aarch64-linux: $HASH_ARM64"
echo " aarch64-darwin: $HASH_DARWIN_AARCH64"
echo " x86_64-darwin: $HASH_DARWIN_X64"
if [ -z "$HASH_AMD64" ] || [ -z "$HASH_ARM64" ] || [ -z "$HASH_DARWIN_AARCH64" ] || [ -z "$HASH_DARWIN_X64" ]; then
echo "ERROR: Failed to extract one or more hashes"
exit 1
fi
sed -i "s/version = \".*\";/version = \"${LATEST_VERSION}\";/" flake.nix
sed -i '/opencode-desktop-linux-amd64.deb/{n;s|hash = "sha256-[^"]*"|hash = "'"${HASH_AMD64}"'"|}' flake.nix
sed -i '/opencode-desktop-linux-arm64.deb/{n;s|hash = "sha256-[^"]*"|hash = "'"${HASH_ARM64}"'"|}' flake.nix
sed -i '/opencode-desktop-darwin-aarch64.app.tar.gz/{n;s|hash = "sha256-[^"]*"|hash = "'"${HASH_DARWIN_AARCH64}"'"|}' flake.nix
sed -i '/opencode-desktop-darwin-x64.app.tar.gz/{n;s|hash = "sha256-[^"]*"|hash = "'"${HASH_DARWIN_X64}"'"|}' flake.nix
echo "Changes:"
git diff flake.nix
- name: Commit and push changes
run: |
if git diff --quiet flake.nix; then
echo "No changes to commit"
exit 0
fi
LATEST_VERSION=$(grep 'version = "' flake.nix | head -1 | sed 's/.*version = "\(.*\)".*/\1/')
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add flake.nix
git commit -m "chore: bump opencode-desktop to ${LATEST_VERSION}"
git push