fix(scripts): keep ISO artifacts out of the repo and auto-update README on release
This commit is contained in:
@@ -283,6 +283,36 @@ git add VERSION
|
|||||||
git commit -m "chore: bump VERSION to ${TAG} for ISO naming" || true
|
git commit -m "chore: bump VERSION to ${TAG} for ISO naming" || true
|
||||||
echo -e " ${GREEN}✓${NC} VERSION file updated to ${VERSION}"
|
echo -e " ${GREEN}✓${NC} VERSION file updated to ${VERSION}"
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
# Step 2b: Auto-update README.md ISO download references
|
||||||
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
echo
|
||||||
|
echo -e "${BLUE}Step 2b: Updating README.md ISO references to ${VERSION}...${NC}"
|
||||||
|
|
||||||
|
README_FILE="README.md"
|
||||||
|
if [ -f "$README_FILE" ]; then
|
||||||
|
# Extract the version currently used in the README's ISO filenames,
|
||||||
|
# e.g. "Sovran_SystemsOS-1.0.6.iso" -> "1.0.6"
|
||||||
|
OLD_ISO_VER=$(grep -oE 'Sovran_SystemsOS-[0-9]+\.[0-9]+\.[0-9]+\.iso' "$README_FILE" | head -1 | sed 's/Sovran_SystemsOS-//; s/\.iso//')
|
||||||
|
|
||||||
|
if [ -n "$OLD_ISO_VER" ] && [ "$OLD_ISO_VER" != "$VERSION" ]; then
|
||||||
|
# Portable in-place edit (works with GNU sed and BSD/macOS sed)
|
||||||
|
sed "s/Sovran_SystemsOS-${OLD_ISO_VER}/Sovran_SystemsOS-${VERSION}/g" \
|
||||||
|
"$README_FILE" > "$README_FILE.tmp" && mv "$README_FILE.tmp" "$README_FILE"
|
||||||
|
|
||||||
|
UPDATED=$(grep -c "Sovran_SystemsOS-${VERSION}" "$README_FILE")
|
||||||
|
echo -e " ${GREEN}✓${NC} README.md: ${OLD_ISO_VER} -> ${VERSION} (${UPDATED} references updated)"
|
||||||
|
|
||||||
|
git add "$README_FILE"
|
||||||
|
git commit -m "docs: update README ISO download links to ${TAG}" || true
|
||||||
|
echo -e " ${GREEN}✓${NC} Committed README update"
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} README.md already references ${VERSION} or no versioned ISO links found — skipping"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${YELLOW}⚠${NC} README.md not found — skipping"
|
||||||
|
fi
|
||||||
|
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
# Step 3: Auto-update CHANGELOG.md
|
# Step 3: Auto-update CHANGELOG.md
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|||||||
+56
-25
@@ -7,7 +7,15 @@
|
|||||||
# Usage:
|
# Usage:
|
||||||
# ./scripts/upload-cdn.sh [--upload]
|
# ./scripts/upload-cdn.sh [--upload]
|
||||||
#
|
#
|
||||||
|
# EVERYTHING this script creates lives OUTSIDE the repository, even when you
|
||||||
|
# run it from inside the repo:
|
||||||
|
# - the nix build output symlink -> $ISO_OUT_DIR/result
|
||||||
|
# - the ISO and .sha256 files -> $ISO_OUT_DIR
|
||||||
|
# The repo working tree stays completely clean.
|
||||||
|
#
|
||||||
# Environment variables (optional):
|
# Environment variables (optional):
|
||||||
|
# ISO_OUT_DIR - dir for the build symlink + ISO + checksum
|
||||||
|
# (default: ~/Sovran-builds)
|
||||||
# CDN_RSYNC_TARGET - rsync destination (e.g. user@server:/var/www/downloads/)
|
# CDN_RSYNC_TARGET - rsync destination (e.g. user@server:/var/www/downloads/)
|
||||||
# CDN_RCLONE_REMOTE - rclone remote target (e.g. s3:my-bucket/downloads/)
|
# CDN_RCLONE_REMOTE - rclone remote target (e.g. s3:my-bucket/downloads/)
|
||||||
# CDN_UPLOAD_CMD - custom upload command
|
# CDN_UPLOAD_CMD - custom upload command
|
||||||
@@ -22,65 +30,88 @@ BLUE='\033[0;34m'
|
|||||||
CYAN='\033[0;36m'
|
CYAN='\033[0;36m'
|
||||||
NC='\033[0m'
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# Always operate from the repo root, no matter where the script is invoked from
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
|
||||||
# Read version from VERSION file
|
# Read version from VERSION file
|
||||||
if [ ! -f VERSION ]; then
|
if [ ! -f VERSION ]; then
|
||||||
echo -e "${RED}Error: VERSION file not found.${NC}" >&2
|
echo -e "${RED}Error: VERSION file not found in $REPO_ROOT.${NC}" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
VERSION=$(cat VERSION | tr -d '\n\r ')
|
VERSION=$(cat VERSION | tr -d '\n\r ')
|
||||||
ISO_NAME="Sovran_SystemsOS-${VERSION}.iso"
|
ISO_NAME="Sovran_SystemsOS-${VERSION}.iso"
|
||||||
SHA_NAME="${ISO_NAME}.sha256"
|
SHA_NAME="${ISO_NAME}.sha256"
|
||||||
|
|
||||||
|
# Output directory OUTSIDE the repo (override with ISO_OUT_DIR)
|
||||||
|
OUT_DIR="${ISO_OUT_DIR:-$HOME/Sovran-builds}"
|
||||||
|
mkdir -p "$OUT_DIR"
|
||||||
|
OUT_DIR="$(cd "$OUT_DIR" && pwd)"
|
||||||
|
ISO_PATH="$OUT_DIR/${ISO_NAME}"
|
||||||
|
SHA_PATH="$OUT_DIR/${SHA_NAME}"
|
||||||
|
RESULT_LINK="$OUT_DIR/result"
|
||||||
|
|
||||||
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||||
echo -e "${BLUE}║ Sovran_SystemsOS CDN ISO Packaging & Upload Tool ║${NC}"
|
echo -e "${BLUE}║ Sovran_SystemsOS CDN ISO Packaging & Upload Tool ║${NC}"
|
||||||
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||||
echo -e " Version : ${CYAN}${VERSION}${NC}"
|
echo -e " Version : ${CYAN}${VERSION}${NC}"
|
||||||
echo -e " ISO : ${CYAN}${ISO_NAME}${NC}"
|
echo -e " ISO : ${CYAN}${ISO_NAME}${NC}"
|
||||||
|
echo -e " Repo : ${CYAN}${REPO_ROOT}${NC} (left untouched)"
|
||||||
|
echo -e " Output : ${CYAN}${OUT_DIR}${NC} (outside the repo)"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# Locate or build ISO
|
# Locate or build ISO
|
||||||
SRC_ISO=""
|
SRC_ISO=""
|
||||||
if [ -f "result/iso/${ISO_NAME}" ]; then
|
if [ -f "$RESULT_LINK/iso/${ISO_NAME}" ]; then
|
||||||
SRC_ISO="result/iso/${ISO_NAME}"
|
SRC_ISO="$RESULT_LINK/iso/${ISO_NAME}"
|
||||||
|
elif [ -f "$RESULT_LINK/iso/Sovran_SystemsOS.iso" ]; then
|
||||||
|
SRC_ISO="$RESULT_LINK/iso/Sovran_SystemsOS.iso"
|
||||||
|
elif [ -f "result/iso/${ISO_NAME}" ]; then
|
||||||
|
SRC_ISO="result/iso/${ISO_NAME}" # legacy: from an older in-repo build
|
||||||
elif [ -f "result/iso/Sovran_SystemsOS.iso" ]; then
|
elif [ -f "result/iso/Sovran_SystemsOS.iso" ]; then
|
||||||
SRC_ISO="result/iso/Sovran_SystemsOS.iso"
|
SRC_ISO="result/iso/Sovran_SystemsOS.iso"
|
||||||
else
|
else
|
||||||
FOUND=$(find result -name "*.iso" 2>/dev/null | head -n 1 || true)
|
FOUND=$(find "$RESULT_LINK" result -name "*.iso" 2>/dev/null | head -n 1 || true)
|
||||||
if [ -n "$FOUND" ]; then
|
if [ -n "$FOUND" ]; then
|
||||||
SRC_ISO="$FOUND"
|
SRC_ISO="$FOUND"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$SRC_ISO" ] || [ ! -f "$SRC_ISO" ]; then
|
if [ -z "$SRC_ISO" ] || [ ! -f "$SRC_ISO" ]; then
|
||||||
echo -e "${YELLOW}Built ISO not found in result/. Building ISO via Nix...${NC}"
|
echo -e "${YELLOW}Built ISO not found. Building via Nix (result link goes outside the repo)...${NC}"
|
||||||
nix build .#nixosConfigurations.sovran_systemsos-iso.config.system.build.isoImage
|
rm -f "$RESULT_LINK"
|
||||||
|
nix build .#nixosConfigurations.sovran_systemsos-iso.config.system.build.isoImage \
|
||||||
if [ -f "result/iso/${ISO_NAME}" ]; then
|
--out-link "$RESULT_LINK"
|
||||||
SRC_ISO="result/iso/${ISO_NAME}"
|
|
||||||
|
if [ -f "$RESULT_LINK/iso/${ISO_NAME}" ]; then
|
||||||
|
SRC_ISO="$RESULT_LINK/iso/${ISO_NAME}"
|
||||||
else
|
else
|
||||||
FOUND=$(find result -name "*.iso" 2>/dev/null | head -n 1 || true)
|
FOUND=$(find "$RESULT_LINK" -name "*.iso" 2>/dev/null | head -n 1 || true)
|
||||||
if [ -n "$FOUND" ]; then
|
if [ -n "$FOUND" ]; then
|
||||||
SRC_ISO="$FOUND"
|
SRC_ISO="$FOUND"
|
||||||
else
|
|
||||||
echo -e "${RED}Error: Failed to locate built ISO in result/.${NC}" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${BLUE}Step 1: Copying built ISO out of Nix store...${NC}"
|
if [ -z "$SRC_ISO" ] || [ ! -f "$SRC_ISO" ]; then
|
||||||
cp -v "$SRC_ISO" "./${ISO_NAME}"
|
echo -e "${RED}Error: Failed to locate built ISO.${NC}" >&2
|
||||||
echo -e " ${GREEN}✓${NC} Copied to ./${ISO_NAME}"
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${BLUE}Step 1: Copying built ISO to output dir (outside repo)...${NC}"
|
||||||
|
cp -v "$SRC_ISO" "$ISO_PATH"
|
||||||
|
echo -e " ${GREEN}✓${NC} Copied to $ISO_PATH"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo -e "${BLUE}Step 2: Generating versioned SHA-256 checksum...${NC}"
|
echo -e "${BLUE}Step 2: Generating versioned SHA-256 checksum...${NC}"
|
||||||
sha256sum "${ISO_NAME}" > "${SHA_NAME}"
|
sha256sum "$ISO_PATH" > "$SHA_PATH"
|
||||||
echo -e " ${GREEN}✓${NC} Generated ${SHA_NAME}"
|
echo -e " ${GREEN}✓${NC} Generated $SHA_PATH"
|
||||||
cat "${SHA_NAME}"
|
cat "$SHA_PATH"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo -e "${BLUE}Step 3: Verifying checksum...${NC}"
|
echo -e "${BLUE}Step 3: Verifying checksum...${NC}"
|
||||||
sha256sum --check "${SHA_NAME}"
|
sha256sum --check "$SHA_PATH"
|
||||||
echo -e " ${GREEN}✓${NC} Checksum verified successfully"
|
echo -e " ${GREEN}✓${NC} Checksum verified successfully"
|
||||||
|
|
||||||
# Parse arguments for upload
|
# Parse arguments for upload
|
||||||
@@ -97,7 +128,7 @@ done
|
|||||||
if [ "$DO_UPLOAD" -eq 1 ]; then
|
if [ "$DO_UPLOAD" -eq 1 ]; then
|
||||||
echo
|
echo
|
||||||
echo -e "${BLUE}Step 4: Uploading to CDN...${NC}"
|
echo -e "${BLUE}Step 4: Uploading to CDN...${NC}"
|
||||||
|
|
||||||
UPLOADED=0
|
UPLOADED=0
|
||||||
if [ -n "${CDN_UPLOAD_CMD:-}" ]; then
|
if [ -n "${CDN_UPLOAD_CMD:-}" ]; then
|
||||||
echo -e " Running custom CDN_UPLOAD_CMD..."
|
echo -e " Running custom CDN_UPLOAD_CMD..."
|
||||||
@@ -107,13 +138,13 @@ if [ "$DO_UPLOAD" -eq 1 ]; then
|
|||||||
|
|
||||||
if [ -n "${CDN_RSYNC_TARGET:-}" ]; then
|
if [ -n "${CDN_RSYNC_TARGET:-}" ]; then
|
||||||
echo -e " Uploading via rsync to ${CDN_RSYNC_TARGET}..."
|
echo -e " Uploading via rsync to ${CDN_RSYNC_TARGET}..."
|
||||||
rsync -avP "${ISO_NAME}" "${SHA_NAME}" "${CDN_RSYNC_TARGET}"
|
rsync -avP "$ISO_PATH" "$SHA_PATH" "${CDN_RSYNC_TARGET}"
|
||||||
UPLOADED=1
|
UPLOADED=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "${CDN_RCLONE_REMOTE:-}" ]; then
|
if [ -n "${CDN_RCLONE_REMOTE:-}" ]; then
|
||||||
echo -e " Uploading via rclone to ${CDN_RCLONE_REMOTE}..."
|
echo -e " Uploading via rclone to ${CDN_RCLONE_REMOTE}..."
|
||||||
rclone copy "${ISO_NAME}" "${SHA_NAME}" "${CDN_RCLONE_REMOTE}"
|
rclone copy "$ISO_PATH" "$SHA_PATH" "${CDN_RCLONE_REMOTE}"
|
||||||
UPLOADED=1
|
UPLOADED=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -128,8 +159,8 @@ else
|
|||||||
echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}"
|
echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||||
echo -e "${GREEN}║ ✅ ISO packaging & verification complete! ║${NC}"
|
echo -e "${GREEN}║ ✅ ISO packaging & verification complete! ║${NC}"
|
||||||
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
|
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||||
echo -e "Ready files:"
|
echo -e "Ready files (in ${CYAN}${OUT_DIR}${NC}, outside the repo):"
|
||||||
ls -lh "${ISO_NAME}" "${SHA_NAME}"
|
ls -lh "$ISO_PATH" "$SHA_PATH"
|
||||||
echo
|
echo
|
||||||
echo "To upload to CDN, run:"
|
echo "To upload to CDN, run:"
|
||||||
echo " ./scripts/upload-cdn.sh --upload"
|
echo " ./scripts/upload-cdn.sh --upload"
|
||||||
|
|||||||
Reference in New Issue
Block a user