diff --git a/.buildkite/commands/build-xcframework.sh b/.buildkite/commands/build-xcframework.sh new file mode 100755 index 000000000..9ebd1b199 --- /dev/null +++ b/.buildkite/commands/build-xcframework.sh @@ -0,0 +1,43 @@ +#!/bin/bash -eu + +echo "--- :rust: Installing Rust" +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -v -y + +source "/Users/builder/.cargo/env" + +CACHE_DATE=$(date +%V-%y) + +echo "--- :package: Installing Rust Toolchains" +make setup-rust + +BUILD_CACHE_KEY="wprs-xcframework-cache-${CACHE_DATE}" +HAS_CACHE=false + +echo "--- :swift: Building xcframework" +echo "Using cache key: $BUILD_CACHE_KEY" +restore_cache "${BUILD_CACHE_KEY}" + +# Use Apple Archiver because it's way faster +if [[ -f "wprs-build-cache" ]]; then + HAS_CACHE=true + + echo "Extracting from build cache" + aa extract -i wprs-build-cache.aar +fi + +make xcframework +zip -r target/libwordpressFFI.xcframework.zip target/libwordpressFFI.xcframework + +# Remove huge files that we can rebuild quickly. +# This brings the cache size from 49GB down to 33GB. +find "." -type f -name "libwp_api.*" -exec rm -v {} + +find "." -type f -name "libwordpress.a" -exec rm -v {} + + +# if [ "$HAS_CACHE" = false ]; then +echo "Building Cache" +# Use Apple Archiver because it's way faster +aa archive -D target -o wprs-build-cache.aar +stat wprs-build-cache.aar +save_cache ./wprs-build-cache.aar "${BUILD_CACHE_KEY}" --force +rm wprs-build-cache.aar +# fi diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 73bc91186..351d33e14 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -60,24 +60,14 @@ steps: steps: - label: ":swift: :darwin: Build xcframework" key: "xcframework" - command: | - echo "--- :rust: Installing Rust" - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -v -y - - source "/Users/builder/.cargo/env" - - echo "--- :package: Installing Rust Toolchains" - make setup-rust - - echo "--- :swift: Building xcframework" - make xcframework - zip -r target/libwordpressFFI.xcframework.zip target/libwordpressFFI.xcframework + command: ".buildkite/commands/build-xcframework.sh" artifact_paths: - target/libwordpressFFI.xcframework.zip - native/swift/Sources/wordpress-api-wrapper/wp_api.swift - native/swift/Sources/wordpress-api-wrapper/wp_localization.swift - native/swift/Sources/wordpress-api-wrapper/wp_com.swift - native/swift/Sources/wordpress-api-wrapper/jetpack.swift + plugins: [$CI_TOOLKIT] agents: queue: mac - label: ":swift: Build Docs" diff --git a/.buildkite/release.sh b/.buildkite/release.sh index 3998808d4..2e765f830 100755 --- a/.buildkite/release.sh +++ b/.buildkite/release.sh @@ -21,8 +21,9 @@ make setup-rust echo "--- :rubygems: Setting up Gems" install_gems -echo "--- :rust: Building XCFramework" -make xcframework-package +echo "--- :rust: Preparing XCFramework" +.buildkite/download-xcframework.sh +make xcframework-package-only make xcframework-package-checksum release_version="$1" diff --git a/Makefile b/Makefile index 729deb4fa..35965ac8f 100644 --- a/Makefile +++ b/Makefile @@ -130,7 +130,9 @@ else xcframework: xcframework-all endif -xcframework-package: xcframework-all +xcframework-package: xcframework-all xcframework-package-only + +xcframework-package-only: rm -rf libwordpressFFI.xcframework.zip ditto -c -k --sequesterRsrc --keepParent target/libwordpressFFI.xcframework/ libwordpressFFI.xcframework.zip