diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml index e597d8c0299..84b5e00a610 100644 --- a/.cirrus.tasks.yml +++ b/.cirrus.tasks.yml @@ -426,6 +426,20 @@ task: CCACHE_DIR: ${HOME}/ccache MACPORTS_CACHE: ${HOME}/macports-cache + MACOS_PACKAGE_LIST: >- + ccache + icu + kerberos5 + lz4 + meson + openldap + openssl + p5.34-io-tty + p5.34-ipc-run + python312 + tcl + zstd + CC: ccache cc CXX: ccache c++ CFLAGS: -Og -ggdb @@ -461,26 +475,14 @@ task: macports_cache: folder: ${MACPORTS_CACHE} fingerprint_script: | - # Include the OS major version in the cache key. If the OS image changes - # to a different major version, we need to reinstall. + # Reinstall packages if the OS major version, the list of the packages + # to install or the MacPorts install script changes. sw_vers -productVersion | sed 's/\..*//' - # Also start afresh if we change our MacPorts install script. + echo $MACOS_PACKAGE_LIST md5 src/tools/ci/ci_macports_packages.sh reupload_on_changes: true setup_additional_packages_script: | - sh src/tools/ci/ci_macports_packages.sh \ - ccache \ - icu \ - kerberos5 \ - lz4 \ - meson \ - openldap \ - openssl \ - p5.34-io-tty \ - p5.34-ipc-run \ - python312 \ - tcl \ - zstd + sh src/tools/ci/ci_macports_packages.sh $MACOS_PACKAGE_LIST # system python doesn't provide headers sudo /opt/local/bin/port select python3 python312 # Make macports install visible for subsequent steps diff --git a/src/tools/ci/ci_macports_packages.sh b/src/tools/ci/ci_macports_packages.sh index b3df6d36a4e..63e97b37c78 100755 --- a/src/tools/ci/ci_macports_packages.sh +++ b/src/tools/ci/ci_macports_packages.sh @@ -59,11 +59,18 @@ if [ -n "$(port -q installed installed)" ] ; then sudo port unsetrequested installed fi -# if setting all the required packages as requested fails, we need -# to install at least one of them -if ! sudo port setrequested $packages > /dev/null 2>&1 ; then - echo not all required packages installed, doing so now +# If setting all the required packages as requested fails, we need +# to install at least one of them. Need to do so one-by-one as +# port setrequested only reports failures for the first package. +echo "checking if all required packages are installed" +for package in $packages ; do + if ! sudo port setrequested $package > /dev/null 2>&1 ; then update_cached_image=1 + fi +done +echo "done" +if [ "$update_cached_image" -eq 1 ]; then + echo not all required packages installed, doing so now # to keep the image small, we deleted the ports tree from the image... sudo port selfupdate # XXX likely we'll need some other way to force an upgrade at some