Skip to content

Commit 3fdd729

Browse files
authored
fix(plugins): restore OpenSSL libmongoc and DuckDB 1.5.2 libs, guard lib publishing (#1599) (#1600)
1 parent 2d5b704 commit 3fdd729

6 files changed

Lines changed: 188 additions & 36 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3636

3737
### Fixed
3838

39+
- MongoDB: connecting to Atlas no longer fails with TLS internal error (-9838). A plugin build from a stale library snapshot had brought back the old TLS stack; the plugin now ships the OpenSSL build again. (#1599)
40+
- DuckDB: the plugin runs DuckDB 1.5.2 again. The same stale snapshot had rolled it back to 1.5.0.
3941
- JSON import: "Delete existing rows before import" now runs inside the import transaction, so a failed import restores the deleted rows instead of leaving the table emptied.
4042
- JSON import: skip-and-continue mode no longer inserts duplicate rows when part of a batch had already been written before an error.
4143
- JSON import: "Stop and Commit" now keeps the rows inserted before the error instead of rolling them back.

CLAUDE.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,17 @@ scripts/download-libs.sh --force # Re-download and overwrite
6767
Static libs (`Libs/*.a`) are hosted on the `libs-v1` GitHub Release (not in git). When adding or updating a library:
6868

6969
```bash
70-
# 1. Update the .a files in Libs/
71-
# 2. Regenerate checksums
72-
shasum -a 256 Libs/*.a > Libs/checksums.sha256
73-
# 3. Recreate and upload the archive
74-
tar czf /tmp/tablepro-libs-v1.tar.gz -C Libs .
75-
gh release upload libs-v1 /tmp/tablepro-libs-v1.tar.gz --clobber --repo TableProApp/TablePro
76-
# 4. Commit the updated checksums
70+
# 1. Update the .a files in Libs/ (build scripts write them there)
71+
# 2. Publish: verifies all OTHER local libs still match the checksums at HEAD,
72+
# regenerates checksums.sha256, uploads the archive. Name every lib you rebuilt.
73+
scripts/publish-libs.sh libmongoc_arm64.a libmongoc_x86_64.a libmongoc_universal.a libmongoc.a
74+
# 3. Commit the updated checksums
7775
git add Libs/checksums.sha256 && git commit -m "build: update static library checksums"
76+
```
77+
78+
Never run `shasum -a 256 Libs/*.a > Libs/checksums.sha256` by hand: regenerating from a stale `Libs/` reverts other libraries silently (this shipped a broken libmongoc and rolled back DuckDB once). `publish-libs.sh` exists to make that impossible.
79+
80+
```bash
7881

7982
# iOS xcframeworks (Libs/ios/*.xcframework)
8083
tar czf /tmp/tablepro-libs-ios-v1.tar.gz -C Libs/ios .

Libs/checksums.sha256

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,60 @@
1-
b7716e3f295a54feee85c8771332505be2f9a4a430a088d476d60e358d737c9e Libs/libbson.a
2-
36e3a521b8da03bafd0f943c4f3b21c8c573bf9d640c6c9e764c0c3632672849 Libs/libbson_arm64.a
3-
b7716e3f295a54feee85c8771332505be2f9a4a430a088d476d60e358d737c9e Libs/libbson_universal.a
4-
1e502e7fb4edc79639140e18d433a1ed1be2931162daecee71a74d09e9f4c550 Libs/libbson_x86_64.a
5-
9bfd7d7cb4a7ee9823b4c5141e942a8534de63395983388722dc7c98e5d7731e Libs/libcassandra.a
1+
95190fa8792bc3e76d936e47f8b60a3280131233f0bcaa8e665d12c4d122191f Libs/libbson_arm64.a
2+
a629129545493275496aa7a1ee71d54820b9d1e60beeb9537f9d06b1f3bdbc0c Libs/libbson_universal.a
3+
89a8bc9cb581bee9da7467af7c58f776608a090e6fb44d8957c37d54461d8727 Libs/libbson_x86_64.a
4+
a629129545493275496aa7a1ee71d54820b9d1e60beeb9537f9d06b1f3bdbc0c Libs/libbson.a
65
8d7e31145470a339f4f57930831936db30412393a339598deece6f650214865a Libs/libcassandra_arm64.a
76
9bfd7d7cb4a7ee9823b4c5141e942a8534de63395983388722dc7c98e5d7731e Libs/libcassandra_universal.a
87
7f1d058c77b66273db2b3867103c19f62ed0518fb38611b178ce04029213d5d8 Libs/libcassandra_x86_64.a
9-
732adf315bc49f77e2511a9293e49a65e18eb54a3e6d01d8a24eee2d671d2a8a Libs/libcrypto.a
8+
9bfd7d7cb4a7ee9823b4c5141e942a8534de63395983388722dc7c98e5d7731e Libs/libcassandra.a
109
a891a67c2619e2ac1dce64dafc6a24bfde9cabe15312dac6b70a19385664ea84 Libs/libcrypto_arm64.a
1110
732adf315bc49f77e2511a9293e49a65e18eb54a3e6d01d8a24eee2d671d2a8a Libs/libcrypto_universal.a
1211
965ccd38fea5cd97bc878dbf58567e4eed2b2337120f8d46a2da62c094b3c821 Libs/libcrypto_x86_64.a
13-
d95520ba0e250f7c5847cc9dab4bf8a2656fcefd64b35c859f8fae0d37f2f69f Libs/libduckdb.a
14-
1756e47a21076dbfd3bcfb937964dd0af231017f3adc549fdbc114464b304179 Libs/libduckdb_arm64.a
15-
d95520ba0e250f7c5847cc9dab4bf8a2656fcefd64b35c859f8fae0d37f2f69f Libs/libduckdb_universal.a
16-
aa5dfb4014c4b227d842ca20c2572434784cdad2de324afdc28fa8af83965ecd Libs/libduckdb_x86_64.a
17-
c855b0bf6fb8a2f52175a8e212c88a99ddf02890a1f88239613728c145607915 Libs/libhiredis.a
12+
732adf315bc49f77e2511a9293e49a65e18eb54a3e6d01d8a24eee2d671d2a8a Libs/libcrypto.a
13+
1ef4f456b99285dca4fd8cfedef1a2f4936b0a9567a7e332baebdba04bf89d77 Libs/libduckdb_arm64.a
14+
68a13d3a915acc08b59a4b982525afa143b588ec6e19c8e470e2ff97cf0df3d9 Libs/libduckdb_universal.a
15+
e809dd7c7ec05a8218d273b3350a9a20e15a6ddf1e392ccbe5560395166a6b26 Libs/libduckdb_x86_64.a
16+
68a13d3a915acc08b59a4b982525afa143b588ec6e19c8e470e2ff97cf0df3d9 Libs/libduckdb.a
1817
7e63017fa22c2eb7744eccad13857361a5088aa7b2772ab02cd026c8c7b78341 Libs/libhiredis_arm64.a
19-
fb7a32c2c724cb4f3f880030cb19afbbc7db52121ad8e35e00a2e818da9562cf Libs/libhiredis_ssl.a
2018
f1cfc36a7ab47361e9705fe32b1c919b318f606989478e91a808707d93db55a5 Libs/libhiredis_ssl_arm64.a
2119
fb7a32c2c724cb4f3f880030cb19afbbc7db52121ad8e35e00a2e818da9562cf Libs/libhiredis_ssl_universal.a
2220
7eb76bcb7ad4c10da0a0a5d43de182619f74f11c1ae9096823adc5c85280e34b Libs/libhiredis_ssl_x86_64.a
21+
fb7a32c2c724cb4f3f880030cb19afbbc7db52121ad8e35e00a2e818da9562cf Libs/libhiredis_ssl.a
2322
c855b0bf6fb8a2f52175a8e212c88a99ddf02890a1f88239613728c145607915 Libs/libhiredis_universal.a
2423
5e89a8a3b48590f2c68bdcfc0cfde134145e3156d48264c1fd751dc9ef3be505 Libs/libhiredis_x86_64.a
25-
bdec9e92f4e94ccb20fcfc4c121aab42de510cd214e23c0e334057de11889b9a Libs/libmariadb.a
24+
c855b0bf6fb8a2f52175a8e212c88a99ddf02890a1f88239613728c145607915 Libs/libhiredis.a
2625
1fa33b78f52d4815761aeeec20add208719e4f01e0585e417a4d0d6dc98d3e2d Libs/libmariadb_arm64.a
2726
bdec9e92f4e94ccb20fcfc4c121aab42de510cd214e23c0e334057de11889b9a Libs/libmariadb_universal.a
2827
6ca5ea9b190b515108ba577b1db89458c1ac2f3263f2a4e4edcc94d5a66c5984 Libs/libmariadb_x86_64.a
29-
0d7ddc82dc7327a4b5187ffbc68a1419b5e5ff7b2be7b927e16793eef4d34303 Libs/libmongoc.a
30-
9f4c87916ef65eae43b19d7568dc4fd4dffd884dc0cae15913b90965293339a7 Libs/libmongoc_arm64.a
31-
0d7ddc82dc7327a4b5187ffbc68a1419b5e5ff7b2be7b927e16793eef4d34303 Libs/libmongoc_universal.a
32-
635705c7dc8d689efdee5ec1bd8a8cbd0d09ae20db0869480271a293d492de50 Libs/libmongoc_x86_64.a
33-
3ca491a723b9d9dfc13b815659b44a82253b540dd6b115f03ac68c5154ec26db Libs/libpgcommon.a
28+
bdec9e92f4e94ccb20fcfc4c121aab42de510cd214e23c0e334057de11889b9a Libs/libmariadb.a
29+
e05f73a64a8166704aa728445f11bccfb2a183bf617a72e02387396c20f7923f Libs/libmongoc_arm64.a
30+
e2b01b498b62b01059e897bad2b0d3d0c5c8d78e74399cc3ec5824737885a997 Libs/libmongoc_universal.a
31+
f6baadba56e3ca1cb06ee9d40e4cde7eac35735ee499ec3c12a643c7b0667155 Libs/libmongoc_x86_64.a
32+
e2b01b498b62b01059e897bad2b0d3d0c5c8d78e74399cc3ec5824737885a997 Libs/libmongoc.a
3433
5dbf2cb5ef37d8adbf607db82461b36a3fd7037c11d891383e6e918378a33d78 Libs/libpgcommon_arm64.a
3534
3ca491a723b9d9dfc13b815659b44a82253b540dd6b115f03ac68c5154ec26db Libs/libpgcommon_universal.a
3635
4bfad7376aefa866d1ed0b7e54966ec6c9d70dcfed928e1311c20321bf08881c Libs/libpgcommon_x86_64.a
37-
efba529b1ad767de988a58ca2c3fdcc26c38ce79df044a988f41fddbf9fde118 Libs/libpgport.a
36+
3ca491a723b9d9dfc13b815659b44a82253b540dd6b115f03ac68c5154ec26db Libs/libpgcommon.a
3837
813b962c5ae1c317bf6facfe68bd1301fa766768e074f3063fc2e8243213fe13 Libs/libpgport_arm64.a
3938
efba529b1ad767de988a58ca2c3fdcc26c38ce79df044a988f41fddbf9fde118 Libs/libpgport_universal.a
4039
bf71cc776245c0ce44bfd7b0286664d5c9771992fd70ec32a0c27fc669e4422f Libs/libpgport_x86_64.a
41-
b86ecf68d2b0dd8aa7712d13607c9584df2297aca4cd651428e8ee974c6bdf80 Libs/libpq.a
40+
efba529b1ad767de988a58ca2c3fdcc26c38ce79df044a988f41fddbf9fde118 Libs/libpgport.a
4241
70cb70b88130c1c88ccf108e31e17d45dbbc2d10267db7ff33d63305a6a05baf Libs/libpq_arm64.a
4342
b86ecf68d2b0dd8aa7712d13607c9584df2297aca4cd651428e8ee974c6bdf80 Libs/libpq_universal.a
4443
1ce2b45af228915fad05e07f54e96621af7143e199e002e5100777261a7f4a13 Libs/libpq_x86_64.a
45-
445b51e6fdaa0a0eceb8090e6d552a551ec15d91e4370a4cc356c8f561e8b469 Libs/libssh2.a
44+
b86ecf68d2b0dd8aa7712d13607c9584df2297aca4cd651428e8ee974c6bdf80 Libs/libpq.a
4645
166e0e23ce60fd2edcae38b6005de106394f7e2bc922a4944317d6aa576f284c Libs/libssh2_arm64.a
4746
445b51e6fdaa0a0eceb8090e6d552a551ec15d91e4370a4cc356c8f561e8b469 Libs/libssh2_universal.a
4847
76681299c4305273cea62e59cfa366ceb5cc320831b87fd6a06143d342f8b7db Libs/libssh2_x86_64.a
49-
3ca208dedf57dbae4f5cb0a22bfbedeba80dc6740d626484d9d815811d64a2aa Libs/libssl.a
48+
445b51e6fdaa0a0eceb8090e6d552a551ec15d91e4370a4cc356c8f561e8b469 Libs/libssh2.a
5049
b3861975896ebf35255d8c3efccdc59ad39874c9b70fdd710ebd15f0a58c4e10 Libs/libssl_arm64.a
5150
3ca208dedf57dbae4f5cb0a22bfbedeba80dc6740d626484d9d815811d64a2aa Libs/libssl_universal.a
5251
34de647ccd0951095f987591562a5236348bac2d4b3e217877559a7b170cf4e4 Libs/libssl_x86_64.a
53-
071e9853ec4bb1f6a19ed99eb91cfe823e83bad178e1e1997deee414cd0e4dfc Libs/libsybdb.a
52+
3ca208dedf57dbae4f5cb0a22bfbedeba80dc6740d626484d9d815811d64a2aa Libs/libssl.a
5453
38a16ca8a041c1be3ca6d4884f7c5e196d14f60bee80004c8f54a41899c17e0f Libs/libsybdb_arm64.a
5554
071e9853ec4bb1f6a19ed99eb91cfe823e83bad178e1e1997deee414cd0e4dfc Libs/libsybdb_universal.a
5655
e437cf1fab3eaf675bdb5aab4443a891763e5325033ddfe369775bd64a22b57b Libs/libsybdb_x86_64.a
57-
8f8135b8214cfef035b49486a863f891979efc04d97d75e2bc14cb4e28aed233 Libs/libuv.a
56+
071e9853ec4bb1f6a19ed99eb91cfe823e83bad178e1e1997deee414cd0e4dfc Libs/libsybdb.a
5857
beff08628396ffb7c2e23b9f1db08ce92be215fbfd50c6e62088e216d73a0897 Libs/libuv_arm64.a
5958
8f8135b8214cfef035b49486a863f891979efc04d97d75e2bc14cb4e28aed233 Libs/libuv_universal.a
6059
2592a74df696709dcc631e9ad48894763157e9c5a34f0cb6a23a4036bce0c472 Libs/libuv_x86_64.a
60+
8f8135b8214cfef035b49486a863f891979efc04d97d75e2bc14cb4e28aed233 Libs/libuv.a

scripts/build-duckdb.sh

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ if [ ! -f "duckdb.cpp" ]; then
2323
unzip -o libduckdb-src.zip
2424
fi
2525

26+
copy_unless_same_file() {
27+
[ "$1" -ef "$2" ] || cp "$1" "$2"
28+
}
29+
2630
build_arch() {
2731
local arch=$1
2832
echo "Building for $arch..."
@@ -35,18 +39,18 @@ build_arch() {
3539
case "$ARCH" in
3640
arm64)
3741
build_arch arm64
38-
cp "$LIBS_DIR/libduckdb_arm64.a" "$LIBS_DIR/libduckdb.a"
42+
copy_unless_same_file "$LIBS_DIR/libduckdb_arm64.a" "$LIBS_DIR/libduckdb.a"
3943
;;
4044
x86_64)
4145
build_arch x86_64
42-
cp "$LIBS_DIR/libduckdb_x86_64.a" "$LIBS_DIR/libduckdb.a"
46+
copy_unless_same_file "$LIBS_DIR/libduckdb_x86_64.a" "$LIBS_DIR/libduckdb.a"
4347
;;
4448
both|universal)
4549
build_arch arm64
4650
build_arch x86_64
4751
echo "Creating universal binary..."
4852
lipo -create "$LIBS_DIR/libduckdb_arm64.a" "$LIBS_DIR/libduckdb_x86_64.a" -output "$LIBS_DIR/libduckdb_universal.a"
49-
cp "$LIBS_DIR/libduckdb_universal.a" "$LIBS_DIR/libduckdb.a"
53+
copy_unless_same_file "$LIBS_DIR/libduckdb_universal.a" "$LIBS_DIR/libduckdb.a"
5054
echo "Created libduckdb_universal.a"
5155
;;
5256
*)

scripts/build-libmongoc.sh

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ create_universal() {
215215
"$LIBS_DIR/${lib}_arm64.a" \
216216
"$LIBS_DIR/${lib}_x86_64.a" \
217217
-output "$LIBS_DIR/${lib}_universal.a"
218+
if ! [ "$LIBS_DIR/${lib}_universal.a" -ef "$LIBS_DIR/${lib}.a" ]; then
219+
cp "$LIBS_DIR/${lib}_universal.a" "$LIBS_DIR/${lib}.a"
220+
fi
218221
echo " ${lib}_universal.a ($(ls -lh "$LIBS_DIR/${lib}_universal.a" | awk '{print $5}'))"
219222
fi
220223
done
@@ -237,13 +240,13 @@ verify_tls_backend() {
237240

238241
local symbols
239242
symbols=$(nm "$lib" 2>/dev/null || true)
240-
if echo "$symbols" | grep -q "_SSL_CTX_new"; then
243+
if grep -q "_SSL_CTX_new" <<< "$symbols"; then
241244
echo " ✅ libmongoc references OpenSSL symbols (SSL_CTX_new)"
242245
else
243246
echo " ❌ libmongoc does NOT reference OpenSSL symbols"
244247
exit 1
245248
fi
246-
if echo "$symbols" | grep -qE "_SSLHandshake|_SSLCreateContext"; then
249+
if grep -qE "_SSLHandshake|_SSLCreateContext" <<< "$symbols"; then
247250
echo " ❌ libmongoc still references Secure Transport symbols"
248251
exit 1
249252
fi

scripts/publish-libs.sh

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
# Publish updated static libraries to the libs-v1 GitHub Release.
5+
#
6+
# Guards against publishing from a stale checkout: every library you did
7+
# NOT name must still match the checksums committed at HEAD. Regenerating
8+
# checksums.sha256 from a stale Libs/ has silently reverted previously
9+
# published libraries before (#1401 reverted the OpenSSL libmongoc from
10+
# #1251 and the DuckDB 1.5.2 bump from #1106).
11+
#
12+
# Usage:
13+
# scripts/publish-libs.sh <lib.a> [<lib.a> ...]
14+
#
15+
# Example (after rebuilding libmongoc/libbson):
16+
# scripts/publish-libs.sh libmongoc_arm64.a libmongoc_x86_64.a \
17+
# libmongoc_universal.a libmongoc.a libbson_arm64.a libbson_x86_64.a \
18+
# libbson_universal.a libbson.a
19+
#
20+
# Steps:
21+
# 1. Verify all unnamed libs against git HEAD checksums
22+
# 2. Regenerate Libs/checksums.sha256
23+
# 3. Create and upload tablepro-libs-v1.tar.gz (--clobber)
24+
# 4. Remind you to commit checksums.sha256
25+
26+
REPO="TableProApp/TablePro"
27+
LIBS_TAG="libs-v1"
28+
LIBS_ARCHIVE="tablepro-libs-v1.tar.gz"
29+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
30+
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
31+
CHECKSUMS_FILE="Libs/checksums.sha256"
32+
33+
cd "$PROJECT_DIR"
34+
35+
if [ "$#" -eq 0 ]; then
36+
echo "Usage: $0 <lib.a> [<lib.a> ...]"
37+
echo "Name every library you rebuilt; all others are verified against HEAD."
38+
exit 1
39+
fi
40+
41+
declare -a UPDATED=()
42+
for arg in "$@"; do
43+
UPDATED+=("$(basename "$arg")")
44+
done
45+
46+
is_updated() {
47+
local name=$1
48+
for u in "${UPDATED[@]}"; do
49+
[ "$u" = "$name" ] && return 0
50+
done
51+
return 1
52+
}
53+
54+
for name in "${UPDATED[@]}"; do
55+
if [ ! -f "Libs/$name" ]; then
56+
echo "❌ Updated library Libs/$name does not exist."
57+
exit 1
58+
fi
59+
done
60+
61+
committed_checksums=$(git show "HEAD:$CHECKSUMS_FILE")
62+
63+
echo "🔍 Verifying unchanged libraries against HEAD checksums..."
64+
stale=()
65+
while read -r expected path; do
66+
[ -n "$path" ] || continue
67+
name=$(basename "$path")
68+
is_updated "$name" && continue
69+
if [ ! -f "$path" ]; then
70+
stale+=("$path (missing locally)")
71+
continue
72+
fi
73+
actual=$(shasum -a 256 "$path" | awk '{print $1}')
74+
if [ "$actual" != "$expected" ]; then
75+
stale+=("$path")
76+
fi
77+
done <<< "$committed_checksums"
78+
79+
if [ "${#stale[@]}" -gt 0 ]; then
80+
echo "❌ These libraries differ from the checksums committed at HEAD,"
81+
echo " but were not named as updated:"
82+
for s in "${stale[@]}"; do
83+
echo " - $s"
84+
done
85+
echo ""
86+
echo "Your Libs/ checkout is stale or carries unintended changes."
87+
echo "Run scripts/download-libs.sh --force, re-apply only the libraries"
88+
echo "you rebuilt, then retry. If a listed library was rebuilt on"
89+
echo "purpose, pass it as an argument."
90+
exit 1
91+
fi
92+
93+
new_libs=()
94+
for lib in Libs/*.a; do
95+
name=$(basename "$lib")
96+
known=$(awk -v p="Libs/$name" '$2 == p {print $1}' <<< "$committed_checksums")
97+
if [ -z "$known" ] && ! is_updated "$name"; then
98+
new_libs+=("$lib")
99+
fi
100+
done
101+
if [ "${#new_libs[@]}" -gt 0 ]; then
102+
echo "❌ These libraries are not in the committed checksums and were not"
103+
echo " named as updated:"
104+
for n in "${new_libs[@]}"; do
105+
echo " - $n"
106+
done
107+
echo "Name them explicitly if they are meant to be published."
108+
exit 1
109+
fi
110+
111+
unchanged=0
112+
for name in "${UPDATED[@]}"; do
113+
expected=$(awk -v p="Libs/$name" '$2 == p {print $1}' <<< "$committed_checksums")
114+
[ -n "$expected" ] || continue
115+
actual=$(shasum -a 256 "Libs/$name" | awk '{print $1}')
116+
if [ "$actual" = "$expected" ]; then
117+
echo " ℹ️ Libs/$name is identical to the version at HEAD"
118+
unchanged=$((unchanged + 1))
119+
fi
120+
done
121+
if [ "$unchanged" -eq "${#UPDATED[@]}" ]; then
122+
echo "❌ Nothing to publish: every named library matches HEAD."
123+
exit 1
124+
fi
125+
126+
echo "✅ All unchanged libraries match HEAD"
127+
128+
echo "📝 Regenerating $CHECKSUMS_FILE..."
129+
shasum -a 256 Libs/*.a > "$CHECKSUMS_FILE"
130+
131+
echo "📦 Creating $LIBS_ARCHIVE..."
132+
tar czf "/tmp/$LIBS_ARCHIVE" -C Libs .
133+
134+
echo "☁️ Uploading to $REPO@$LIBS_TAG..."
135+
gh release upload "$LIBS_TAG" "/tmp/$LIBS_ARCHIVE" --clobber --repo "$REPO"
136+
rm -f "/tmp/$LIBS_ARCHIVE"
137+
138+
echo ""
139+
echo "🎉 Published. Now commit the checksum update:"
140+
echo " git add $CHECKSUMS_FILE && git commit -m \"build: update static library checksums\""

0 commit comments

Comments
 (0)