<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-infrastructure.

</pre>
<p><a href="https://github.com/macports/macports-infrastructure/commit/f1c9aac40b3bb6b8d5d2830c9390c0b70eba3664">https://github.com/macports/macports-infrastructure/commit/f1c9aac40b3bb6b8d5d2830c9390c0b70eba3664</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new f1c9aac  Add alternative version of mprsyncup
</span>f1c9aac is described below

<span style='display:block; white-space:pre;color:#808000;'>commit f1c9aac40b3bb6b8d5d2830c9390c0b70eba3664
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Thu Mar 27 01:02:09 2025 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Add alternative version of mprsyncup
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Relies on most of the work being done by GitHub actions, which upload
</span><span style='display:block; white-space:pre;color:#404040;'>    their results to the server.
</span>---
 jobs/mprsyncup-alt | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 154 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/jobs/mprsyncup-alt b/jobs/mprsyncup-alt
</span>new file mode 100755
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..36e9d0f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/jobs/mprsyncup-alt
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,154 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#! /bin/bash
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Alternate method of updating MacPorts rsync files.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Starting update of rsync files at $(date -u -Iseconds)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Read shell fragment with config variables if specified
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ -f "$MPRSYNCUP_CONFIG" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    . "$MPRSYNCUP_CONFIG"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Defaults
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+OPENSSL=${OPENSSL:-/usr/bin/openssl}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+RSYNC=${RSYNC:-/usr/bin/rsync}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+SIGNIFY=${SIGNIFY:-/usr/bin/signify-openbsd}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+TAR=${TAR:-/usr/bin/tar}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+GZIP=${GZIP:-/usr/bin/gzip}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# signify public key used to verify base releases
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+BASE_PUBKEY=${BASE_PUBKEY:-/var/keys/macports-base-2024.pub}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Path where the public mirrored files should be deployed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ -z "$MIRROR_PUBLIC_PATH" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Must specify MIRROR_PUBLIC_PATH"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Path to where ports trees uploaded by GitHub Actions can be found
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ -z "$MIRROR_UPLOAD_PATH" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Must specify MIRROR_UPLOAD_PATH"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Path to openssl private key file used to sign base and ports tarballs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ -z "$PRIVKEY" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Must specify PRIVKEY"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    exit 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+HOSTOS="$(uname -s)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+BASEDIR=$(pwd)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+mkdir -p "${BASEDIR}/rsyncroot/release/tarballs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Check for a newer base release
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+NEW_BASE=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ -f "${MIRROR_PUBLIC_PATH}/distfiles/MacPorts/RELEASE_URL" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    NEW_BASE_VERS="$(cat "${MIRROR_PUBLIC_PATH}/distfiles/MacPorts/RELEASE_URL" | sed -E 's/.*v([0-9.]+)$/\1/')"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Latest base version is $NEW_BASE_VERS"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if [ -f "${MIRROR_PUBLIC_PATH}/release/tarballs/base.tar" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        CUR_BASE_VERS="$("$TAR" -xOf "${MIRROR_PUBLIC_PATH}/release/tarballs/base.tar" ./base/config/macports_version)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Currently mirrored base version is $CUR_BASE_VERS"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if [ "$CUR_BASE_VERS" != "$NEW_BASE_VERS" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            NEW_BASE=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        NEW_BASE=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Update base.tar (for selfupdate with older clients)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ "$NEW_BASE" = 1 -a -f "${MIRROR_PUBLIC_PATH}/distfiles/MacPorts/MacPorts-${NEW_BASE_VERS}.tar.bz2" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        -a -f "${MIRROR_PUBLIC_PATH}/distfiles/MacPorts/MacPorts-${NEW_BASE_VERS}.tar.bz2.sig" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if "$SIGNIFY" -V -p "$BASE_PUBKEY" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            -m "${MIRROR_PUBLIC_PATH}/distfiles/MacPorts/MacPorts-${NEW_BASE_VERS}.tar.bz2" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            -s "${MIRROR_PUBLIC_PATH}/distfiles/MacPorts/MacPorts-${NEW_BASE_VERS}.tar.bz2.sig"; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Signature verified for MacPorts-${NEW_BASE_VERS}.tar.bz2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        rm -rf "${BASEDIR}/rsyncroot/release/tarballs/base" "${BASEDIR}/rsyncroot/release/tarballs/MacPorts-${NEW_BASE_VERS}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Creating base.tar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs" -xjf "${MIRROR_PUBLIC_PATH}/distfiles/MacPorts/MacPorts-${NEW_BASE_VERS}.tar.bz2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        mv "${BASEDIR}/rsyncroot/release/tarballs/MacPorts-${NEW_BASE_VERS}" "${BASEDIR}/rsyncroot/release/tarballs/base"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs" -cf "${BASEDIR}/rsyncroot/release/tarballs/base.tar" base
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        rm -rf "${BASEDIR}/rsyncroot/release/tarballs/base" "${BASEDIR}/rsyncroot/release/tarballs/MacPorts-${NEW_BASE_VERS}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Signing base.tar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "$OPENSSL" dgst -ripemd160 -sign "${PRIVKEY}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            -out "${BASEDIR}/rsyncroot/release/tarballs/base.tar.rmd160" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            "${BASEDIR}/rsyncroot/release/tarballs/base.tar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Failed to verify signature for MacPorts-${NEW_BASE_VERS}.tar.bz2!"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Prepare ports tree and PortIndex dirs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LATEST_PORTS_UPLOAD="$(ls -1t "${MIRROR_UPLOAD_PATH}"/portindex-*.tar.bz2 | head -n1)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Clean up older uploads
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Cleaning up old ports uploads"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+find "${MIRROR_UPLOAD_PATH}" -type f -name "portindex-*.tar.bz2" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -not -newer "$LATEST_PORTS_UPLOAD" -not -samefile "$LATEST_PORTS_UPLOAD" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -delete -printf "Deleted %f\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+rm -rf "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+mkdir -p "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Extracting latest ports"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" -xjf "$LATEST_PORTS_UPLOAD"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Create ports.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Creating release/tarballs/ports.tar(.gz)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+rm -f "${BASEDIR}/rsyncroot/release/tarballs/ports.tar" "${BASEDIR}/rsyncroot/release/tarballs/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" -cf "${BASEDIR}/rsyncroot/release/tarballs/ports.tar" ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"$GZIP" --best --keep --rsyncable "${BASEDIR}/rsyncroot/release/tarballs/ports.tar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Create daily tarball
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Creating daily tarball"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+rm -f "${BASEDIR}/rsyncroot/distfiles/ports.tar.gz" "${BASEDIR}/rsyncroot/release/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+mv "${BASEDIR}"/rsyncroot/release/tarballs/extract/PortIndex* "${BASEDIR}"/rsyncroot/release/tarballs/extract/ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" --exclude 'PortIndex*/PortIndex.json' \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    -c --use-compress-program "$GZIP --best --rsyncable" -f "${BASEDIR}/rsyncroot/release/ports.tar.gz" ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ln "${BASEDIR}/rsyncroot/release/ports.tar.gz" "${BASEDIR}/rsyncroot/distfiles/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Put PortIndex dirs in place
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Moving PortIndex dirs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+mv "${BASEDIR}"/rsyncroot/release/tarballs/extract/ports/PortIndex* "${BASEDIR}"/rsyncroot/release/tarballs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Deleting temp extracted ports tree"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+rm -rf "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Sign files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+for f in "${BASEDIR}"/rsyncroot/release/tarballs/ports.tar{,.gz} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         "${BASEDIR}"/rsyncroot/release/tarballs/PortIndex*/PortIndex\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         "${BASEDIR}"/rsyncroot/{release,distfiles}/ports.tar.gz; do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Signing $f"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    "$OPENSSL" dgst -ripemd160 -sign "${PRIVKEY}" -out "${f}.rmd160" "${f}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+done
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Ensure readability
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Setting permissions"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+chmod -R a+rX "${BASEDIR}/rsyncroot"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Stop rsyncd once there are no connections
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ "$HOSTOS" = "Linux" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    WAITED=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Waiting for rsyncd to be idle"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    while [ -n "$(ss -H 'sport = :rsync')" ]; do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sleep 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        WAITED=$(( $WAITED + 10 ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if [ "$WAITED" -ge 7200 ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            echo "Waited $(( $WAITED / 60 )) minutes for rsync connections to close, shutting down anyway"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    done
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Stopping rsyncd"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sudo /usr/bin/systemctl stop rsync
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Sync files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Rsyncing files"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"$RSYNC" -aHv "${BASEDIR}"/rsyncroot/ "$MIRROR_PUBLIC_PATH"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Start rsyncd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ "$HOSTOS" = "Linux" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Starting rsyncd"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sudo /usr/bin/systemctl start rsync
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+echo "Finished update of rsync files at $(date -u -Iseconds)"
</span></pre><pre style='margin:0'>

</pre>