diff --git a/resource/netboot.xyz-multiarch.iso b/resource/netboot.xyz-multiarch.iso index c3a4527..2691c72 100644 Binary files a/resource/netboot.xyz-multiarch.iso and b/resource/netboot.xyz-multiarch.iso differ diff --git a/scripts/update_netboot_xyz.sh b/scripts/update_netboot_xyz.sh new file mode 100755 index 0000000..901d47f --- /dev/null +++ b/scripts/update_netboot_xyz.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# +# Exit immediately if a command exits with a non-zero status +set -e + +C_RST="$(tput sgr0)" +C_ERR="$(tput setaf 1)" +C_OK="$(tput setaf 2)" +C_WARN="$(tput setaf 3)" +C_INFO="$(tput setaf 5)" + +msg() { printf '%s%s%s\n' $2 "$1" $C_RST; } + +msg_info() { msg "$1" $C_INFO; } +msg_ok() { msg "$1" $C_OK; } +msg_err() { msg "$1" $C_ERR; } +msg_warn() { msg "$1" $C_WARN; } + +# Get the latest release information +msg_info "Getting latest release information ..." +LATEST_RELEASE=$(curl -s \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/netbootxyz/netboot.xyz/releases | jq ' + [.[] | select(.prerelease == false and .draft == false and .assets != null and (.assets | length > 0))] | + sort_by(.created_at) | + .[-1]') + +# Extract version, download URL, and digest +VERSION=$(echo "$LATEST_RELEASE" | jq -r '.tag_name') +ISO_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[] | select(.name == "netboot.xyz-multiarch.iso") | .browser_download_url') +EXPECTED_CHECKSUM=$(echo "$LATEST_RELEASE" | jq -r '.assets[] | select(.name == "netboot.xyz-multiarch.iso") | .digest' | sed 's/sha256://') + +msg_ok "Latest version: $VERSION" +msg_ok "ISO URL: $ISO_URL" +msg_ok "Expected SHA256: $EXPECTED_CHECKSUM" + + +# Check if we already have the same version +if [ -f "resource/netboot.xyz-multiarch.iso" ]; then + msg_info "Checking current resource file ..." + + # First check by checksum (fastest) + CURRENT_CHECKSUM=$(shasum -a 256 resource/netboot.xyz-multiarch.iso | awk '{print $1}') + + if [ "$CURRENT_CHECKSUM" = "$EXPECTED_CHECKSUM" ]; then + msg_ok "Resource file is already up to date (version $VERSION). No update needed." + exit 0 + else + msg_info "Checksums differ, proceeding with download ..." + fi +fi + +# Download ISO file +TMP_ISO=$(mktemp -t netbootxyziso) +msg_info "Downloading ISO file ..." +curl -L -o "$TMP_ISO" "$ISO_URL" + +# Verify SHA256 checksum +msg_info "Verifying SHA256 checksum ..." +ACTUAL_CHECKSUM=$(shasum -a 256 "$TMP_ISO" | awk '{print $1}') + +if [ "$EXPECTED_CHECKSUM" = "$ACTUAL_CHECKSUM" ]; then + msg_ok "Verified SHA256 checksum." + mv -f "$TMP_ISO" "resource/netboot.xyz-multiarch.iso" + msg_ok "Updated ISO file." + git add "resource/netboot.xyz-multiarch.iso" + git commit -m "chore: update netboot.xyz-multiarch.iso to $VERSION" + msg_ok "Committed changes." + msg_ok "You can now push the changes to the remote repository." + exit 0 +else + msg_err "Inconsistent SHA256 checksum." + msg_err "Expected: $EXPECTED_CHECKSUM" + msg_err "Actual: $ACTUAL_CHECKSUM" + exit 1 +fi \ No newline at end of file