From 1bc5233c19b796934262c24fbc6249cce9ca88e3 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Wed, 11 Mar 2026 14:54:37 +0100 Subject: [PATCH 1/6] ci: Bump GHA actions versions Github-Pull: #34802 Rebased-From: fadaa7db335d1b1bd2674c51d89d6c0820ddb887 --- .github/actions/configure-docker/action.yml | 4 ++-- .github/workflows/ci.yml | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/actions/configure-docker/action.yml b/.github/actions/configure-docker/action.yml index fc014156590..e45d26ee232 100644 --- a/.github/actions/configure-docker/action.yml +++ b/.github/actions/configure-docker/action.yml @@ -20,7 +20,7 @@ runs: esac - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 with: # Use host network to allow access to cirrus gha cache running on the host driver-opts: | @@ -28,7 +28,7 @@ runs: # This is required to allow buildkit to access the actions cache - name: Expose actions cache variables - uses: actions/github-script@v6 + uses: actions/github-script@v8 with: script: | Object.keys(process.env).forEach(function (key) { diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32b2e6d6f20..59403bd3b16 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -167,7 +167,7 @@ jobs: - name: Restore Ccache cache id: ccache-cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: ${{ env.CCACHE_DIR }} key: ${{ github.job }}-${{ matrix.job-type }}-ccache-${{ github.run_id }} @@ -179,7 +179,7 @@ jobs: FILE_ENV: ${{ matrix.file-env }} - name: Save Ccache cache - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 if: github.event_name != 'pull_request' && steps.ccache-cache.outputs.cache-hit != 'true' with: path: ${{ env.CCACHE_DIR }} @@ -246,7 +246,7 @@ jobs: key: ${{ github.job }}-vcpkg-tools - name: Restore vcpkg binary cache - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 id: vcpkg-binary-cache with: path: ~/AppData/Local/vcpkg/archives @@ -257,7 +257,7 @@ jobs: cmake -B build -Werror=dev --preset vs2022 -DCMAKE_TOOLCHAIN_FILE="${VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake" ${{ matrix.generate-options }} - name: Save vcpkg binary cache - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 if: github.event_name != 'pull_request' && steps.vcpkg-binary-cache.outputs.cache-hit != 'true' && matrix.job-type == 'standard' with: path: ~/AppData/Local/vcpkg/archives @@ -358,7 +358,7 @@ jobs: uses: ./.github/actions/save-caches - name: Upload built executables - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: x86_64-w64-mingw32-executables-${{ github.run_id }} path: | @@ -380,7 +380,7 @@ jobs: - *CHECKOUT - name: Download built executables - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: x86_64-w64-mingw32-executables-${{ github.run_id }} From e2f6e3a80fbc4fb79b66a909271c1cfa385f966b Mon Sep 17 00:00:00 2001 From: will Date: Thu, 12 Mar 2026 09:37:52 +0000 Subject: [PATCH 2/6] ci: bump cirruslabs actions versions Github-Pull: #34815 Rebased-From: 9a968ad35efe04bfd86299c5dfbc48ada41bc46e --- .github/actions/restore-caches/action.yml | 8 ++++---- .github/actions/save-caches/action.yml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/actions/restore-caches/action.yml b/.github/actions/restore-caches/action.yml index 8dc35d4902e..21f2807f4c7 100644 --- a/.github/actions/restore-caches/action.yml +++ b/.github/actions/restore-caches/action.yml @@ -5,7 +5,7 @@ runs: steps: - name: Restore Ccache cache id: ccache-cache - uses: cirruslabs/cache/restore@v4 + uses: cirruslabs/cache/restore@v5 with: path: ${{ env.CCACHE_DIR }} key: ccache-${{ env.CONTAINER_NAME }}-${{ github.run_id }} @@ -14,7 +14,7 @@ runs: - name: Restore depends sources cache id: depends-sources - uses: cirruslabs/cache/restore@v4 + uses: cirruslabs/cache/restore@v5 with: path: ${{ env.SOURCES_PATH }} key: depends-sources-${{ env.CONTAINER_NAME }}-${{ env.DEPENDS_HASH }} @@ -23,7 +23,7 @@ runs: - name: Restore built depends cache id: depends-built - uses: cirruslabs/cache/restore@v4 + uses: cirruslabs/cache/restore@v5 with: path: ${{ env.BASE_CACHE }} key: depends-built-${{ env.CONTAINER_NAME }}-${{ env.DEPENDS_HASH }} @@ -32,7 +32,7 @@ runs: - name: Restore previous releases cache id: previous-releases - uses: cirruslabs/cache/restore@v4 + uses: cirruslabs/cache/restore@v5 with: path: ${{ env.PREVIOUS_RELEASES_DIR }} key: previous-releases-${{ env.CONTAINER_NAME }}-${{ env.PREVIOUS_RELEASES_HASH }} diff --git a/.github/actions/save-caches/action.yml b/.github/actions/save-caches/action.yml index 0e3b31246c6..3072ab3f224 100644 --- a/.github/actions/save-caches/action.yml +++ b/.github/actions/save-caches/action.yml @@ -11,28 +11,28 @@ runs: echo "previous releases direct cache hit to primary key: ${{ env.previous-releases-cache-hit }}" - name: Save Ccache cache - uses: cirruslabs/cache/save@v4 + uses: cirruslabs/cache/save@v5 if: ${{ (github.event_name == 'push') && (github.ref_name == github.event.repository.default_branch) }} with: path: ${{ env.CCACHE_DIR }} key: ccache-${{ env.CONTAINER_NAME }}-${{ github.run_id }} - name: Save depends sources cache - uses: cirruslabs/cache/save@v4 + uses: cirruslabs/cache/save@v5 if: ${{ (github.event_name == 'push') && (github.ref_name == github.event.repository.default_branch) && (env.depends-sources-cache-hit != 'true') }} with: path: ${{ env.SOURCES_PATH }} key: depends-sources-${{ env.CONTAINER_NAME }}-${{ env.DEPENDS_HASH }} - name: Save built depends cache - uses: cirruslabs/cache/save@v4 + uses: cirruslabs/cache/save@v5 if: ${{ (github.event_name == 'push') && (github.ref_name == github.event.repository.default_branch) && (env.depends-built-cache-hit != 'true' )}} with: path: ${{ env.BASE_CACHE }} key: depends-built-${{ env.CONTAINER_NAME }}-${{ env.DEPENDS_HASH }} - name: Save previous releases cache - uses: cirruslabs/cache/save@v4 + uses: cirruslabs/cache/save@v5 if: ${{ (github.event_name == 'push') && (github.ref_name == github.event.repository.default_branch) && (env.previous-releases-cache-hit != 'true' )}} with: path: ${{ env.PREVIOUS_RELEASES_DIR }} From 671980e7799ed26e082f99e0127b905f9bea0e53 Mon Sep 17 00:00:00 2001 From: fanquake Date: Tue, 10 Mar 2026 16:42:59 +0000 Subject: [PATCH 3/6] macdeploy: subprocess out to zip rather than shutil.make_archive Calling shutil.make_archive(), does not preserve symlinks when using the zip format, see https://github.com/python/cpython/issues/139679. Call `zip` using subprocess instead. This code is only run when using a macos machine, and I think it's safe to assume that zip is available, same as codesign, and all other tools we call in this script. Github-Pull: #34787 Rebased-From: ab137cbfe2763f2306e52c7c5f1860d87defc636 --- contrib/macdeploy/macdeployqtplus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus index 802afa5389d..09b21a60781 100755 --- a/contrib/macdeploy/macdeployqtplus +++ b/contrib/macdeploy/macdeployqtplus @@ -499,7 +499,7 @@ if platform.system() == "Darwin": # ------------------------------------------------ if config.zip is not None: - shutil.make_archive('{}'.format(appname), format='zip', root_dir='dist', base_dir='Bitcoin-Qt.app') + subprocess.check_call(["zip", "-ry", os.path.abspath(appname + ".zip"), 'Bitcoin-Qt.app'], cwd='dist') # ------------------------------------------------ From 17778c2b632371e590ab0be74386dd3320635cf9 Mon Sep 17 00:00:00 2001 From: fanquake Date: Wed, 11 Mar 2026 10:33:01 +0000 Subject: [PATCH 4/6] macdeploy: use plugins dir to find plugins Rather than looking for /translations, which might not exist (it doesn't in a recent brew installed qt on macOS). i.e: ```bash ls /opt/homebrew/opt/qtbase/share/qt doc libexec metatypes mkspecs modules plugins sbom ``` Github-Pull: #34787 Rebased-From: 66d80d57b48982d8301e21321a9d82780586908d --- contrib/macdeploy/macdeployqtplus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus index 09b21a60781..01a723687b5 100755 --- a/contrib/macdeploy/macdeployqtplus +++ b/contrib/macdeploy/macdeployqtplus @@ -160,7 +160,7 @@ class DeploymentInfo(object): def detectQtPath(self, frameworkDirectory: str): parentDir = os.path.dirname(frameworkDirectory) - if os.path.exists(os.path.join(parentDir, "share", "qt", "translations")): + if os.path.exists(os.path.join(parentDir, "share", "qt", "plugins")): self.qtPath = parentDir else: self.qtPath = os.getenv("QTDIR", None) From 0f922ed1f99c50bfaff3db9f138acf20a4580b48 Mon Sep 17 00:00:00 2001 From: fanquake Date: Tue, 10 Mar 2026 12:08:05 +0000 Subject: [PATCH 5/6] ci: check macos bundle structure and codesigning Github-Pull: #34787 Rebased-From: d03e3be246f64065002268e74ee9a834089de37a --- ci/test/03_test_script.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ci/test/03_test_script.sh b/ci/test/03_test_script.sh index 7a1e7f32133..16d1f1cd462 100755 --- a/ci/test/03_test_script.sh +++ b/ci/test/03_test_script.sh @@ -165,6 +165,14 @@ if [ "$RUN_CHECK_DEPS" = "true" ]; then "${BASE_ROOT_DIR}/contrib/devtools/check-deps.sh" "${BASE_BUILD_DIR}" fi +if [[ "$CI_OS_NAME" == "macos" && "${GOAL}" = "install deploy" ]]; then + unzip "${BASE_BUILD_DIR}/Bitcoin-Core.zip" -d "${BASE_BUILD_DIR}/deploy" + if ! ( codesign --verify "${BASE_BUILD_DIR}/deploy/Bitcoin-Qt.app" ); then + echo "Codesigning failed." + false + fi +fi + if [ "$RUN_UNIT_TESTS" = "true" ]; then DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" \ LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" \ From f788f1e5cc50a0dfb0c63be8fa9dcf0c2da84009 Mon Sep 17 00:00:00 2001 From: fanquake Date: Wed, 11 Mar 2026 15:46:42 +0000 Subject: [PATCH 6/6] doc: update release notes for v30.x --- doc/release-notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 12eccd1ce58..2147de3985e 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -65,6 +65,7 @@ Notable changes - #34627 guix: use a temporary file over sponge, drop moreutils - #34713 depends: Allow building Qt packages after interruption - #34754 depends: Qt fixes for GCC 16 compatibility +- #34787 build: fix native macOS deployment ### Test @@ -97,6 +98,8 @@ Notable changes - #34344 ci: update GitHub Actions versions - #34453 ci: Always print low ccache hit rate notice - #34461 ci: Print verbose build error message in test-each-commit +- #34802 ci: Bump GHA actions versions +- #34815 ci: bump cirruslabs actions versions Credits =======