agora inbox for pgsql-hackers@postgresql.orghelp / color / mirror / Atom feed
[PATCH v1 6/6] Handle pg_get_triggerdef default args in system_functions.sql 453+ messages / 2 participants [nested] [flat]
* [PATCH v1 6/6] Handle pg_get_triggerdef default args in system_functions.sql @ 2025-12-09 19:51 Mark Wong <markwkm@gmail.com> 0 siblings, 0 replies; 453+ messages in thread From: Mark Wong @ 2025-12-09 19:51 UTC (permalink / raw) Modernize pg_get_triggerdef to use CREATE OR REPLACE FUNCTION to handle the optional pretty argument. --- src/backend/catalog/system_functions.sql | 7 +++++++ src/backend/utils/adt/ruleutils.c | 14 -------------- src/include/catalog/pg_proc.dat | 5 +---- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql index 81d210a9c45..c9c011ea5c1 100644 --- a/src/backend/catalog/system_functions.sql +++ b/src/backend/catalog/system_functions.sql @@ -699,6 +699,13 @@ LANGUAGE INTERNAL PARALLEL SAFE AS 'pg_get_expr'; +CREATE OR REPLACE FUNCTION + pg_get_triggerdef(trigger oid, pretty bool DEFAULT false) +RETURNS TEXT +LANGUAGE INTERNAL +PARALLEL SAFE +AS 'pg_get_triggerdef'; + -- -- The default permissions for functions mean that anyone can execute them. -- A number of functions shouldn't be executable by just anyone, but rather diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 9effa02fa2e..45a35f823e8 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -807,20 +807,6 @@ pg_get_viewdef_worker(Oid viewoid, int prettyFlags, int wrapColumn) */ Datum pg_get_triggerdef(PG_FUNCTION_ARGS) -{ - Oid trigid = PG_GETARG_OID(0); - char *res; - - res = pg_get_triggerdef_worker(trigid, false); - - if (res == NULL) - PG_RETURN_NULL(); - - PG_RETURN_TEXT_P(string_to_text(res)); -} - -Datum -pg_get_triggerdef_ext(PG_FUNCTION_ARGS) { Oid trigid = PG_GETARG_OID(0); bool pretty = PG_GETARG_BOOL(1); diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 10c5286bd7d..146963c254b 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -3974,9 +3974,6 @@ proname => 'pg_get_partition_constraintdef', provolatile => 's', prorettype => 'text', proargtypes => 'oid', prosrc => 'pg_get_partition_constraintdef' }, -{ oid => '1662', descr => 'trigger description', - proname => 'pg_get_triggerdef', provolatile => 's', prorettype => 'text', - proargtypes => 'oid', prosrc => 'pg_get_triggerdef' }, { oid => '1665', descr => 'name of sequence for a serial column', proname => 'pg_get_serial_sequence', provolatile => 's', prorettype => 'text', proargtypes => 'text text', prosrc => 'pg_get_serial_sequence' }, @@ -8535,7 +8532,7 @@ prosrc => 'pg_timezone_names' }, { oid => '2730', descr => 'trigger description with pretty-print option', proname => 'pg_get_triggerdef', provolatile => 's', prorettype => 'text', - proargtypes => 'oid bool', prosrc => 'pg_get_triggerdef_ext' }, + proargtypes => 'oid bool', prosrc => 'pg_get_triggerdef' }, # asynchronous notifications { oid => '3035', -- 2.51.2 --IRGsBYp1UN8d6WrT-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
* [PATCH v12a 3/3] ci: macports improvements @ 2026-06-04 14:17 Andres Freund <andres@anarazel.de> 0 siblings, 0 replies; 453+ messages in thread From: Andres Freund @ 2026-06-04 14:17 UTC (permalink / raw) I realized two things: 1) We should save the macports cache before building & running tests, we don't want to again start from scratch if the task failed or was cancelled 2) We should use a partial cache match, as it's much faster to start from that, than from scratch. This requires some additional complexity, we now need an explicit restore step and need to check if the install step succeeded. But it's a very substantial improvement in runtime, so it's worthwhile. --- .github/workflows/pg-ci.yml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml index dea8d95d729..dd4ff4c91d3 100644 --- a/.github/workflows/pg-ci.yml +++ b/.github/workflows/pg-ci.yml @@ -690,18 +690,23 @@ jobs: sudo sysctl kern.corefile="$HOME/cores/core.%P" - name: "Macports: Compute cache key" - id: mpkey + id: mp-key run: | macos_major=$(sw_vers -productVersion | sed 's/\..*//') pkglist_hash=$(printf '%s' "$MACOS_PACKAGE_LIST" | md5 -q) script_hash=$(md5 -q src/tools/ci/ci_macports_packages.sh) echo "key=macports-${macos_major}-${pkglist_hash}-${script_hash}" >> "$GITHUB_OUTPUT" + # It's faster to start with a partial cache for the same macos + # version than from scratch + echo "restore-key=macports-${macos_major}-" >> "$GITHUB_OUTPUT" - name: "MacPorts: Restore cache" - uses: actions/cache@v5 + id: mp-restore + uses: actions/cache/restore@v5 with: path: ${{ env.MACPORTS_CACHE }} - key: ${{ steps.mpkey.outputs.key }} + key: ${{ steps.mp-key.outputs.key }} + restore-keys: ${{ steps.mp-key.outputs.restore-key }} # Use MacPorts, even though Homebrew is installed. The installation # of the additional packages we need would take quite a while with @@ -714,6 +719,7 @@ jobs: # actually p5.34-io-tty. Using the unversioned name works, but # updates MacPorts every time. - name: "MacPorts: Install dependencies" + id: mp-install env: # Pass token so the script's GitHub API call to list MacPorts # releases isn't subject to the 60/h/IP unauthenticated rate @@ -727,6 +733,18 @@ jobs: echo /opt/local/sbin >> "$GITHUB_PATH" echo /opt/local/bin >> "$GITHUB_PATH" + # Save macports before running build / tests, creating macports can be + # quite slow, so we don't want to start from scratch in the next run. + - name: "MacPorts: Save cache" + uses: actions/cache/save@v5 + # Don't save cache if we had an exact match + if: | + steps.mp-install.conclusion == 'success' && + steps.mp-restore.outputs.cache-hit != 'true' + with: + path: ${{ env.MACPORTS_CACHE }} + key: ${{ steps.mp-key.outputs.key }} + - name: Configure env: PKG_CONFIG_PATH: /opt/local/lib/pkgconfig/ -- 2.54.0.380.gc69baaf57b --ijwec7zgt2lxep65-- ^ permalink raw reply [nested|flat] 453+ messages in thread
end of thread, other threads:[~2026-06-04 14:17 UTC | newest] Thread overview: 453+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2025-12-09 19:51 [PATCH v1 6/6] Handle pg_get_triggerdef default args in system_functions.sql Mark Wong <markwkm@gmail.com> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de> 2026-06-04 14:17 [PATCH v12a 3/3] ci: macports improvements Andres Freund <andres@anarazel.de>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox