Skip to content

Commit 29ef2fc

Browse files
committed
feat: auto update biome version
Signed-off-by: hackardoX <[email protected]> temp Signed-off-by: hackardoX <[email protected]>
1 parent 74e1a52 commit 29ef2fc

File tree

3 files changed

+184
-2
lines changed

3 files changed

+184
-2
lines changed

.github/workflows/update-biome.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Update Biome Schemas
2+
3+
on:
4+
schedule:
5+
- cron: '0 12 * * *' # Runs at 12:00 UTC every day
6+
workflow_dispatch: # allow manual triggering
7+
8+
jobs:
9+
update-biome:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
# Checkout repository
14+
- name: Checkout repo
15+
uses: actions/checkout@v4
16+
17+
# Setup nix
18+
- name: Setup Nix
19+
uses: cachix/install-nix-action@v31
20+
with:
21+
install_url: https://nixos.org/nix/install
22+
23+
# Run the update script
24+
- name: Update Biome Schemas
25+
run: |
26+
chmod +x ./update-biome-versions.sh
27+
./update-biome-versions.sh
28+
29+
# Create PR (handles everything automatically)
30+
- name: Create Pull Request
31+
uses: peter-evans/create-pull-request@v6
32+
with:
33+
token: ${{ secrets.GITHUB_TOKEN }}
34+
commit-message: Update Biome schema hashes
35+
branch: update/biome-schemas
36+
base: main
37+
title: "Update Biome schema hashes"
38+
body: "Automatically updated Biome schema hashes via scheduled workflow."
39+
add-paths: |
40+
programs/biome.nix

programs/biome.nix

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,52 @@ let
1111
p = pkgs;
1212

1313
cfg = config.programs.biome;
14-
biomeVersion = if builtins.match "^1\\." pkgs.biome.version != null then "1.9.4" else "2.1.2";
15-
schemaUrl = "https://biomejs.dev/schemas/${biomeVersion}/schema.json";
1614
schemaSha256s = {
15+
"1.2.2" = "sha256:0fx7dwg1pya0m45vi8wymhndd8imas6mnd35maznbzk4ig69ffrf";
16+
"1.3.0" = "sha256:0nl5651k3zyqz3rx81mi376h4k3mwgf1bx9sc3rmasm4i9h5h373";
17+
"1.3.1" = "sha256:1wbyx743qn34xpdc2mmfi0vjbvff9pkg1f5q0g4q8ip2czgqqfw4";
18+
"1.3.2" = "sha256:1s08nzwxkc8dkqkd75qb2lw0zvmkaqj2a8pmh0yalfkfl3wkp7yv";
19+
"1.3.3" = "sha256:1s08nzwxkc8dkqkd75qb2lw0zvmkaqj2a8pmh0yalfkfl3wkp7yv";
20+
"1.4.0" = "sha256:1c4dvy2ii6phs4afrsbkvd3srfyhjx6qd6vi1jxj05ilq9kayfjj";
21+
"1.4.1" = "sha256:1c4dvy2ii6phs4afrsbkvd3srfyhjx6qd6vi1jxj05ilq9kayfjj";
22+
"1.5.0" = "sha256:03m82yxdalibb78bsd12203dhwlzrndhw2q30yh7jn86s475g3gk";
23+
"1.5.1" = "sha256:1jbmx26l2lj5gn0z4sxib8jh3nax8my4vwss777vn4jacskhanx2";
24+
"1.5.2" = "sha256:0h2z9x2ys3i3cbjvklgqz62mzs2bh3rfw7hd2xjspn3pyi32bdrv";
25+
"1.5.3" = "sha256:17gbsa7y9cs7ns1196rr1rxkvagli9qj6kq59yxj575cgq2pl4np";
26+
"1.6.0" = "sha256:14sycfdj4rbh6wqsf9cvlkmw6s2c8kpxz7mn5aibplvrwjkaxmc0";
27+
"1.6.1" = "sha256:0sdh9g8ii1ycbwqjsj89qp8s3c9rchghn2adkvajrl04z1pknxw2";
28+
"1.6.2" = "sha256:0j9ymdpnzxgia36q4qf4wdaj7wq431g6s1y935rdkzqyal6m57vv";
29+
"1.6.3" = "sha256:1j52qgk5jwx1ifaic9ssamb35rmg9azhzvlkjha2wpm9bcx7b1ca";
30+
"1.6.4" = "sha256:07d5r5xc7b8zchcg66q0lmqfvzn8lhqk85ygznphdij6bqf5zvi8";
31+
"1.7.0" = "sha256:09wflniz1djv3x1w9sbr9jz8zjk7db6knhff0yi5yqhnc2qbwa26";
32+
"1.7.1" = "sha256:0h4nchb4gymzmz4c22ckclf3vljkka6j7rpdsplwxzyh31nfi8l6";
33+
"1.7.2" = "sha256:08qgr0fccj0i4k1037cq8xbxlqbgd05q26h3wj8jiq4n94dn1ddw";
34+
"1.7.3" = "sha256:12qyzyzx74r1m4w56q0mj5d9kkl7jq6cmn2lzrmg83s4vwb8cgay";
35+
"1.8.0" = "sha256:0d0wwvb9lvgfzpsyb4g0dcdqfgrw7v11f1g869g30smfq1y1daqx";
36+
"1.8.1" = "sha256:0bhp7xhpjciiqyx3nbqqqgxi705k1767ikadkxky483ipa5m4wik";
37+
"1.8.2" = "sha256:01b4qr0aql8vm1g63nc56hybzsc36f3ws91zr8vmwyb4pzm8cksl";
38+
"1.8.3" = "sha256:0sbzlbdlx6gijw2wk5n0x9lx5zz93sm5fhrxm2z64hhvp8kscr43";
39+
"1.9.0" = "sha256:1whq6jv40jfzxjpxy9knqx9fwiajb6mgfcjd2ypr2r8nvfill0jp";
40+
"1.9.1" = "sha256:1c1201h3lal8gqig15cqnrayd1dqf64xkk3nhhzlhkvqhjy6kwn1";
41+
"1.9.2" = "sha256:098pz1klkh752mnpq8hhw47l09a194xhadfhmb7xjfjps4gcz97g";
42+
"1.9.3" = "sha256:1ww2by73b8csa3haphjxv4j10rk5hzsw8kgwgmb4axrqmxhvnrga";
1743
"1.9.4" = "sha256:0yzw4vymwpa7akyq45v7kkb9gp0szs6zfm525zx2vh1d80568dlz";
44+
"2.0.0" = "sha256:17rz3kswhlqns04cff55sdmkgy6q9klxa3r16m4wssfs8cwcqnzy";
45+
"2.0.4" = "sha256:1bc690175l9s4knalqpmrss1wagc4v7dwh0nmjgajkfm7h46z6qk";
46+
"2.0.5" = "sha256:1bc690175l9s4knalqpmrss1wagc4v7dwh0nmjgajkfm7h46z6qk";
47+
"2.0.6" = "sha256:122v3c1w037mwmbil83l1yhhxissl5gp07qyyrkml7hfc8wraavf";
48+
"2.1.0" = "sha256:0r5fcvlpdal1zc32nhcslicp2jmr0bhlrnmr5xlhwrjdknbb5hxk";
49+
"2.1.1" = "sha256:0r5fcvlpdal1zc32nhcslicp2jmr0bhlrnmr5xlhwrjdknbb5hxk";
1850
"2.1.2" = "sha256:07qlk53lja9rsa46b8nv3hqgdzc9mif5r1nwh7i8mrxcqmfp99s2";
51+
"2.1.3" = "sha256:03sr8wfwjk8yww7ai7sics8p32bh4f760pzzxzcqllv6npy6kcpk";
52+
"2.1.4" = "sha256:10slb3g26lbrmid424xnrcr23fyyzx1n4189xymxw0ys4bl8743l";
53+
"2.2.0" = "sha256:15hwjj1bmsp6pa9rmj4l73n247g4cssh0fy443bk1pafcz3ns18j";
1954
};
55+
allVersions = builtins.attrNames schemaSha256s;
56+
biomeVersion = if (pkgs.biome.version != null && builtins.elem pkgs.biome.version allVersions)
57+
then pkgs.biome.version
58+
else builtins.elemAt (builtins.sort (v: w: builtins.compareVersions v w) allVersions) (builtins.length allVersions - 1);
59+
schemaUrl = "https://biomejs.dev/schemas/${biomeVersion}/schema.json";
2060
schemaSha256 = schemaSha256s.${biomeVersion};
2161

2262
ext.js = [

update-biome-versions.sh

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
FILE="programs/biome.nix"
5+
6+
# ---- cross-platform sed in-place helper ----
7+
sedi() {
8+
local sed_expr="$1"
9+
local file="$2"
10+
if sed --version >/dev/null 2>&1; then
11+
# GNU sed
12+
sed -i "$sed_expr" "$file"
13+
else
14+
# BSD/macOS sed
15+
sed -i '' "$sed_expr" "$file"
16+
fi
17+
}
18+
19+
# ---- get stable and unstable Biome versions from nixpkgs ----
20+
get_biome_version() {
21+
local ref=$1
22+
nix eval --raw "github:NixOS/nixpkgs/$ref#biome.version"
23+
}
24+
25+
get_nixos_stable_tag() {
26+
git ls-remote --tags https://github.com/NixOS/nixpkgs.git \
27+
| awk '{print $2}' \
28+
| grep -E 'refs/tags/[0-9]+\.[0-9]+$' \
29+
| sed 's|refs/tags/||' \
30+
| sort -V \
31+
| tail -n1
32+
}
33+
34+
STABLE_VERSION=$(get_biome_version "$(get_nixos_stable_tag)")
35+
UNSTABLE_VERSION=$(get_biome_version "nixos-unstable")
36+
37+
# ---- deduplicate version list ----
38+
mapfile -t VERSION_LIST < <(printf "%s\n" "$STABLE_VERSION" "$UNSTABLE_VERSION" | sort -u)
39+
echo "Versions to check: ${VERSION_LIST[*]}"
40+
41+
# ---- extract existing schemaSha256s block into TMP_ENTRIES ----
42+
TMP_ENTRIES="$(mktemp)"
43+
awk '
44+
/^[[:space:]]*schemaSha256s = {/{flag=1; next}
45+
/^[[:space:]]*};/{flag=0; next}
46+
flag && /^[[:space:]]*"/ {print}
47+
' "$FILE" | sed 's/["=;]//g' | awk '{print $1, $2}' > "$TMP_ENTRIES" || true
48+
49+
# ---- helper functions ----
50+
version_known() {
51+
local v="$1"
52+
grep -q "^$v " "$TMP_ENTRIES"
53+
}
54+
55+
schema_exists() {
56+
local v="$1"
57+
local url="https://biomejs.dev/schemas/${v}/schema.json"
58+
curl -fsL -o /dev/null "$url"
59+
}
60+
61+
# ---- add missing versions to TMP_ENTRIES ----
62+
for v in "${VERSION_LIST[@]}"; do
63+
if version_known "$v"; then
64+
echo "⚡ already recorded: $v"
65+
continue
66+
fi
67+
68+
if schema_exists "$v"; then
69+
echo "✅ found: $v — prefetching hash..."
70+
sha=$(nix-prefetch-url --quiet --type sha256 "https://biomejs.dev/schemas/${v}/schema.json")
71+
echo "$v sha256:$sha" >> "$TMP_ENTRIES"
72+
else
73+
echo "❌ schema not found for $v"
74+
fi
75+
done
76+
77+
# ---- sort all entries ----
78+
sort -V "$TMP_ENTRIES" -o "$TMP_ENTRIES"
79+
80+
# ---- rebuild schemaSha256s block in the file ----
81+
TMP_FILE="$(mktemp)"
82+
awk -v entries="$TMP_ENTRIES" '
83+
BEGIN { while ((getline < entries) > 0) { e[++n] = $0 } }
84+
/^[[:space:]]*schemaSha256s = {/,/^[[:space:]]*};/ {
85+
if ($0 ~ /^[[:space:]]*schemaSha256s = {/) {
86+
print $0
87+
for (i=1;i<=n;i++) {
88+
split(e[i], a, " ")
89+
printf " \"%s\" = \"%s\";\n", a[1], a[2]
90+
}
91+
next
92+
}
93+
if ($0 ~ /^[[:space:]]*};/) { print $0; next }
94+
next
95+
}
96+
{ print }
97+
' "$FILE" > "$TMP_FILE"
98+
99+
mv "$TMP_FILE" "$FILE"
100+
rm "$TMP_ENTRIES"
101+
102+
echo "✨ Updated schemaSha256s in $FILE"

0 commit comments

Comments
 (0)