Skip to content

Commit f82dc99

Browse files
committed
fix: make release packaging portable
- replace zip and shasum shell dependencies with Python stdlib helpers - keep release checksum and archive generation working under Git Bash on Windows
1 parent 8bed057 commit f82dc99

1 file changed

Lines changed: 40 additions & 5 deletions

File tree

scripts/release-package.sh

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ DIST_DIR="$ROOT_DIR/dist"
1818
TMP_DIR="$(mktemp -d)"
1919
PACKAGE_NAME="git-auto-sync-${VERSION}-release"
2020
PACKAGE_ROOT="$TMP_DIR/$PACKAGE_NAME"
21+
PYTHON_BIN="${PYTHON:-}"
2122
ARTIFACTS=(
2223
"$DIST_DIR/${PACKAGE_NAME}.tar.gz"
2324
"$DIST_DIR/${PACKAGE_NAME}.tar.gz.sha256sum"
@@ -35,6 +36,17 @@ RELEASE_FILES=(
3536
"uv.lock"
3637
)
3738

39+
if [[ -z "$PYTHON_BIN" ]]; then
40+
if command -v python3 >/dev/null 2>&1; then
41+
PYTHON_BIN="python3"
42+
elif command -v python >/dev/null 2>&1; then
43+
PYTHON_BIN="python"
44+
else
45+
echo "Missing required command for release package: python3 or python" >&2
46+
exit 1
47+
fi
48+
fi
49+
3850
for item in "${RELEASE_FILES[@]}"; do
3951
if [[ ! -e "$ROOT_DIR/$item" ]]; then
4052
echo "Missing required file for release package: $item" >&2
@@ -56,12 +68,35 @@ find "$PACKAGE_ROOT" -type f \( -name "*.pyc" -o -name "*.pyo" \) -delete
5668
cp -f "$ROOT_DIR/README.md" "$PACKAGE_ROOT/INSTALL.md"
5769

5870
tar -czf "$DIST_DIR/${PACKAGE_NAME}.tar.gz" -C "$TMP_DIR" "$PACKAGE_NAME"
59-
shasum -a 256 "$DIST_DIR/${PACKAGE_NAME}.tar.gz" | awk '{print $1}' > "$DIST_DIR/${PACKAGE_NAME}.tar.gz.sha256sum"
71+
"$PYTHON_BIN" - "$DIST_DIR/${PACKAGE_NAME}.tar.gz" "$DIST_DIR/${PACKAGE_NAME}.tar.gz.sha256sum" <<'PY'
72+
from pathlib import Path
73+
import hashlib
74+
import sys
6075
61-
(
62-
cd "$TMP_DIR" && zip -r "$DIST_DIR/${PACKAGE_NAME}.zip" "$PACKAGE_NAME" >/dev/null
63-
)
64-
shasum -a 256 "$DIST_DIR/${PACKAGE_NAME}.zip" | awk '{print $1}' > "$DIST_DIR/${PACKAGE_NAME}.zip.sha256sum"
76+
archive = Path(sys.argv[1])
77+
checksum = Path(sys.argv[2])
78+
checksum.write_text(hashlib.sha256(archive.read_bytes()).hexdigest() + "\n", encoding="utf-8")
79+
PY
80+
81+
"$PYTHON_BIN" - "$TMP_DIR" "$PACKAGE_NAME" "$DIST_DIR/${PACKAGE_NAME}.zip" "$DIST_DIR/${PACKAGE_NAME}.zip.sha256sum" <<'PY'
82+
from pathlib import Path
83+
import hashlib
84+
import sys
85+
import zipfile
86+
87+
tmp_dir = Path(sys.argv[1])
88+
package_name = sys.argv[2]
89+
archive = Path(sys.argv[3])
90+
checksum = Path(sys.argv[4])
91+
package_root = tmp_dir / package_name
92+
93+
with zipfile.ZipFile(archive, "w", compression=zipfile.ZIP_DEFLATED) as zf:
94+
for path in sorted(package_root.rglob("*")):
95+
if path.is_file():
96+
zf.write(path, path.relative_to(tmp_dir).as_posix())
97+
98+
checksum.write_text(hashlib.sha256(archive.read_bytes()).hexdigest() + "\n", encoding="utf-8")
99+
PY
65100

66101
rm -rf "$TMP_DIR"
67102

0 commit comments

Comments
 (0)